{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|default_exp utils"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Utilities"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> General helper functions used throughout the library"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "from tsai.imports import *\n",
    "import joblib\n",
    "import string\n",
    "import yaml\n",
    "from numbers import Integral\n",
    "from numpy.random import default_rng\n",
    "from scipy.stats import ttest_ind, ks_2samp, pearsonr, spearmanr, normaltest, linregress\n",
    "warnings.filterwarnings(\"ignore\", category=FutureWarning)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "rng = default_rng()\n",
    "def random_choice(\n",
    "    a, # 1-D array-like or int. The values from which to draw the samples.\n",
    "    size=None, # int or tuple of ints, optional. The shape of the output.\n",
    "    replace=True, # bool, optional. Whether or not to allow the same value to be drawn multiple times.\n",
    "    p=None, # 1-D array-like, optional. The probabilities associated with each entry in a.\n",
    "    axis=0, # int, optional. The axis along which the samples are drawn.\n",
    "    shuffle=True, # bool, optional. Whether or not to shuffle the samples before returning them.\n",
    "    dtype=None, # data type of the output.\n",
    "    seed=None, # int or None, optional. Seed for the random number generator.\n",
    "):\n",
    "    \"Same as np.random.choice but with a faster random generator, dtype and seed\"\n",
    "    rand_gen = default_rng(seed) if seed is not None else rng\n",
    "    result = rand_gen.choice(a, size=size, replace=replace, p=p, axis=axis, shuffle=shuffle)\n",
    "    if dtype is None:\n",
    "        return result\n",
    "    return result.astype(dtype=dtype, copy=False)\n",
    "\n",
    "\n",
    "def random_randint(\n",
    "    low, # int, lower endpoint of interval (inclusive)\n",
    "    high=None, # int, upper endpoint of interval (exclusive), or None for a single-argument form of low.\n",
    "    size=None, # int or tuple of ints, optional. Output shape.\n",
    "    dtype=int, # data type of the output.\n",
    "    endpoint=False, # bool, optional. If True, `high` is an inclusive endpoint. If False, the range is open on the right.\n",
    "    seed=None,  # int or None, optional. Seed for the random number generator.\n",
    "):\n",
    "    \"Same as np.random.randint but with a faster random generator and seed\"\n",
    "    rand_gen = default_rng(seed) if seed is not None else rng\n",
    "    return rand_gen.integers(low, high, size=size, dtype=dtype, endpoint=endpoint)\n",
    "\n",
    "\n",
    "def random_rand(\n",
    "    *d, # int or tuple of ints, optional. The dimensions of the returned array, must be non-negative.\n",
    "    dtype=None, # data type of the output.\n",
    "    out=None, # ndarray, optional. Alternative output array in which to place the result.\n",
    "    seed=None # int or None, optional. Seed for the random number generator.\n",
    "):\n",
    "    \"Same as np.random.rand but with a faster random generator, dtype and seed\"\n",
    "    rand_gen = rng if seed is None else default_rng(seed)\n",
    "    if out is None:\n",
    "        return rand_gen.random(d, dtype=dtype)\n",
    "    else:\n",
    "        rand_gen.random(d, dtype=dtype, out=out)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[5 7 5]\n",
      "[0 1 6]\n",
      "[  4  83 100]\n"
     ]
    }
   ],
   "source": [
    "a = random_choice(10, size=(2,3,4), replace=True, p=None, seed=1)\n",
    "b = random_choice(10, size=(2,3,4), replace=True, p=None, seed=1)\n",
    "test_eq(a, b)\n",
    "c = random_choice(10, size=(2,3,4), replace=True, p=None, seed=2)\n",
    "test_ne(a, c)\n",
    "\n",
    "assert random_choice(10, size=3, replace=True, p=None).shape == (3,)\n",
    "assert random_choice(10, size=(2,3,4), replace=True, p=None).shape == (2,3,4)\n",
    "\n",
    "print(random_choice(10, size=3, replace=True, p=None))\n",
    "print(random_choice(10, size=3, replace=False, p=None))\n",
    "a = [2, 5, 4, 9, 13, 25, 56, 83, 99, 100]\n",
    "print(random_choice(a, size=3, replace=False, p=None))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = random_randint(10, 20, 100, seed=1)\n",
    "b = random_randint(10, 20, 100, seed=1)\n",
    "test_eq(a, b)\n",
    "c = random_randint(10, 20, 100, seed=2)\n",
    "test_ne(a, c)\n",
    "assert (a >= 10).all() and (a < 20).all()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = random_rand(2, 3, 4, seed=123)\n",
    "b = random_rand(2, 3, 4, seed=123)\n",
    "test_eq(a, b)\n",
    "c = random_rand(2, 3, 4, seed=124)\n",
    "test_ne(a, c)\n",
    "assert (a >= 0).all() and (a < 1).all()\n",
    "\n",
    "a = random_rand(2, 3, 4)\n",
    "a_copy = a.copy()\n",
    "random_rand(2, 3, 4, out=a)\n",
    "test_ne(a, a_copy)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def is_nparray(o): return isinstance(o, np.ndarray)\n",
    "def is_tensor(o): return isinstance(o, torch.Tensor)\n",
    "def is_zarr(o): return hasattr(o, 'oindex')\n",
    "def is_dask(o): return hasattr(o, 'compute')\n",
    "def is_memmap(o): return isinstance(o, np.memmap)\n",
    "def is_slice(o): return isinstance(o, slice)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# ensure these folders exist for testing purposes\n",
    "fns = ['data', 'export', 'models']\n",
    "for fn in fns:\n",
    "    path = Path('.')/fn\n",
    "    if not os.path.exists(path): os.makedirs(path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def totensor(o):\n",
    "    if isinstance(o, torch.Tensor): return o\n",
    "    elif isinstance(o, np.ndarray):  return torch.from_numpy(o)\n",
    "    elif isinstance(o, pd.DataFrame): return torch.from_numpy(o.values)\n",
    "    else:\n",
    "        try: return torch.tensor(o)\n",
    "        except: warn(f\"Can't convert {type(o)} to torch.Tensor\", Warning)\n",
    "\n",
    "\n",
    "def toarray(o):\n",
    "    if isinstance(o, np.ndarray): return o\n",
    "    elif isinstance(o, torch.Tensor): return o.cpu().numpy()\n",
    "    elif isinstance(o, pd.DataFrame): return o.values\n",
    "    else:\n",
    "        try: return np.asarray(o)\n",
    "        except: warn(f\"Can't convert {type(o)} to np.array\", Warning)\n",
    "\n",
    "\n",
    "def toL(o):\n",
    "    if isinstance(o, L): return o\n",
    "    elif isinstance(o, (np.ndarray, torch.Tensor)): return L(o.tolist())\n",
    "    else:\n",
    "        try: return L(o)\n",
    "        except: warn(f'passed object needs to be of type L, list, np.ndarray or torch.Tensor but is {type(o)}', Warning)\n",
    "\n",
    "\n",
    "def to3dtensor(o):\n",
    "    o = totensor(o)\n",
    "    if o.ndim == 3: return o\n",
    "    elif o.ndim == 1: return o[None, None]\n",
    "    elif o.ndim == 2: return o[:, None]\n",
    "    assert False, f'Please, review input dimensions {o.ndim}'\n",
    "\n",
    "\n",
    "def to2dtensor(o):\n",
    "    o = totensor(o)\n",
    "    if o.ndim == 2: return o\n",
    "    elif o.ndim == 1: return o[None]\n",
    "    elif o.ndim == 3: return o[0]\n",
    "    assert False, f'Please, review input dimensions {o.ndim}'\n",
    "\n",
    "\n",
    "def to1dtensor(o):\n",
    "    o = totensor(o)\n",
    "    if o.ndim == 1: return o\n",
    "    elif o.ndim == 3: return o[0,0]\n",
    "    if o.ndim == 2: return o[0]\n",
    "    assert False, f'Please, review input dimensions {o.ndim}'\n",
    "\n",
    "\n",
    "def to3darray(o):\n",
    "    o = toarray(o)\n",
    "    if o.ndim == 3: return o\n",
    "    elif o.ndim == 1: return o[None, None]\n",
    "    elif o.ndim == 2: return o[:, None]\n",
    "    assert False, f'Please, review input dimensions {o.ndim}'\n",
    "\n",
    "\n",
    "def to2darray(o):\n",
    "    o = toarray(o)\n",
    "    if o.ndim == 2: return o\n",
    "    elif o.ndim == 1: return o[None]\n",
    "    elif o.ndim == 3: return o[0]\n",
    "    assert False, f'Please, review input dimensions {o.ndim}'\n",
    "\n",
    "\n",
    "def to1darray(o):\n",
    "    o = toarray(o)\n",
    "    if o.ndim == 1: return o\n",
    "    elif o.ndim == 3: o = o[0,0]\n",
    "    elif o.ndim == 2: o = o[0]\n",
    "    assert False, f'Please, review input dimensions {o.ndim}'\n",
    "\n",
    "\n",
    "def to3d(o):\n",
    "    if o.ndim == 3: return o\n",
    "    if isinstance(o, (np.ndarray, pd.DataFrame)): return to3darray(o)\n",
    "    if isinstance(o, torch.Tensor): return to3dtensor(o)\n",
    "\n",
    "\n",
    "def to2d(o):\n",
    "    if o.ndim == 2: return o\n",
    "    if isinstance(o, np.ndarray): return to2darray(o)\n",
    "    if isinstance(o, torch.Tensor): return to2dtensor(o)\n",
    "\n",
    "\n",
    "def to1d(o):\n",
    "    if o.ndim == 1: return o\n",
    "    if isinstance(o, np.ndarray): return to1darray(o)\n",
    "    if isinstance(o, torch.Tensor): return to1dtensor(o)\n",
    "\n",
    "\n",
    "def to2dPlus(o):\n",
    "    if o.ndim >= 2: return o\n",
    "    if isinstance(o, np.ndarray): return to2darray(o)\n",
    "    elif isinstance(o, torch.Tensor): return to2dtensor(o)\n",
    "\n",
    "\n",
    "def to3dPlus(o):\n",
    "    if o.ndim >= 3: return o\n",
    "    if isinstance(o, np.ndarray): return to3darray(o)\n",
    "    elif isinstance(o, torch.Tensor): return to3dtensor(o)\n",
    "\n",
    "\n",
    "def to2dPlusTensor(o):\n",
    "    return to2dPlus(totensor(o))\n",
    "\n",
    "\n",
    "def to2dPlusArray(o):\n",
    "    return to2dPlus(toarray(o))\n",
    "\n",
    "\n",
    "def to3dPlusTensor(o):\n",
    "    return to3dPlus(totensor(o))\n",
    "\n",
    "\n",
    "def to3dPlusArray(o):\n",
    "    return to3dPlus(toarray(o))\n",
    "\n",
    "\n",
    "def todtype(dtype):\n",
    "    def _to_type(o, dtype=dtype):\n",
    "        if o.dtype == dtype: return o\n",
    "        elif isinstance(o, torch.Tensor): o = o.to(dtype=dtype)\n",
    "        elif isinstance(o, np.ndarray): o = o.astype(dtype)\n",
    "        return o\n",
    "    return _to_type"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = np.random.rand(100).astype(np.float32)\n",
    "b = torch.from_numpy(a).float()\n",
    "test_eq(totensor(a), b)\n",
    "test_eq(a, toarray(b))\n",
    "test_eq(to3dtensor(a).ndim, 3)\n",
    "test_eq(to2dtensor(a).ndim, 2)\n",
    "test_eq(to1dtensor(a).ndim, 1)\n",
    "test_eq(to3darray(b).ndim, 3)\n",
    "test_eq(to2darray(b).ndim, 2)\n",
    "test_eq(to1darray(b).ndim, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = np.random.rand(10, 20)\n",
    "df = pd.DataFrame(data)\n",
    "df['target'] = np.random.randint(0, 3, len(df))\n",
    "X = df[df.columns[:-1]]\n",
    "y = df['target']\n",
    "test_eq(to3darray(X).shape, (10, 1, 20))\n",
    "test_eq(toarray(y).shape, (10,))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def bytes2str(\n",
    "    size_bytes : int, # Number of bytes\n",
    "    decimals=2 # Number of decimals in the output\n",
    "    )->str:\n",
    "    if size_bytes == 0: return \"0B\"\n",
    "    size_name = (\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\")\n",
    "    i = int(math.floor(math.log(size_bytes, 1024)))\n",
    "    p = math.pow(1024, i)\n",
    "    # s = round(size_bytes / p, decimals)\n",
    "    return f'{size_bytes / p:.{decimals}f} {size_name[i]}'\n",
    "\n",
    "bytes2size = bytes2str\n",
    "b2s = bytes2str\n",
    "\n",
    "\n",
    "def get_size(\n",
    "    o,                  # Any python object\n",
    "    return_str = False, # True returns size in human-readable format (KB, MB, GB, ...). False in bytes.\n",
    "    decimals   = 2,     # Number of decimals in the output\n",
    "):\n",
    "    if hasattr(o, \"base\") and o.base is not None: # if it's a view\n",
    "        return get_size(o.base, return_str=return_str, decimals=decimals)\n",
    "    if isinstance(o, np.ndarray):\n",
    "        size = o.nbytes\n",
    "    elif isinstance(o, torch.Tensor):\n",
    "        size = sys.getsizeof(o.storage())\n",
    "    elif isinstance(o, pd.DataFrame):\n",
    "        size = o.memory_usage(deep=True).sum()\n",
    "    elif isinstance(o, (list, tuple)):\n",
    "        size = sum(get_size(i) for i in o)\n",
    "    elif isinstance(o, dict):\n",
    "        size = sum(get_size(k) + get_size(v) for k, v in o.items())\n",
    "    else:\n",
    "        size = sys.getsizeof(o)\n",
    "    if return_str:\n",
    "        return bytes2str(size, decimals=decimals)\n",
    "    else:\n",
    "        return size\n",
    "\n",
    "def get_dir_size(\n",
    "    dir_path : str,  # path to directory\n",
    "    return_str : bool = True, # True returns size in human-readable format (KB, MB, GB, ...). False in bytes.\n",
    "    decimals : int = 2, # Number of decimals in the output\n",
    "    verbose : bool = False, # Controls verbosity\n",
    "    ):\n",
    "    assert os.path.isdir(dir_path)\n",
    "    total_size = 0\n",
    "    for dirpath, dirnames, filenames in os.walk(dir_path):\n",
    "        for f in filenames:\n",
    "            fp = os.path.join(dirpath, f)\n",
    "            # skip if it is symbolic link\n",
    "            if not os.path.islink(fp):\n",
    "                fp_size = os.path.getsize(fp)\n",
    "                total_size += fp_size\n",
    "                pv(f'file: {fp[-50:]:50} size: {fp_size}', verbose)\n",
    "    if return_str:\n",
    "        return bytes2str(total_size, decimals=decimals)\n",
    "    return total_size\n",
    "\n",
    "def get_file_size(\n",
    "    file_path : str,  # path to file\n",
    "    return_str : bool = True, # True returns size in human-readable format (KB, MB, GB, ...). False in bytes.\n",
    "    decimals : int = 2, # Number of decimals in the output\n",
    "    ):\n",
    "    assert os.path.isfile(file_path)\n",
    "    fsize = os.path.getsize(file_path)\n",
    "    if return_str:\n",
    "        return bytes2str(fsize, decimals=decimals)\n",
    "    return fsize"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = np.random.rand(10, 5, 3)\n",
    "test_eq(get_size(a, True, 1), '1.2 KB')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def is_np_view(\n",
    "    o# a numpy array\n",
    "):\n",
    "    return hasattr(o, \"base\") and o.base is not None"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = np.array([1., 2., 3.])\n",
    "test_eq(is_np_view(a), False)\n",
    "test_eq(is_np_view(a[1:]), True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def is_file(path):\n",
    "    return os.path.isfile(path)\n",
    "\n",
    "def is_dir(path):\n",
    "    return os.path.isdir(path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_eq(is_file(\"002_utils.ipynb\"), True)\n",
    "test_eq(is_file(\"utils.ipynb\"), False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def delete_all_in_dir(tgt_dir, exception=None):\n",
    "    import shutil\n",
    "    if exception is not None and len(L(exception)) > 1: exception = tuple(exception)\n",
    "    for file in os.listdir(tgt_dir):\n",
    "        if exception is not None and file.endswith(exception): continue\n",
    "        file_path = os.path.join(tgt_dir, file)\n",
    "        if os.path.isfile(file_path) or os.path.islink(file_path): os.unlink(file_path)\n",
    "        elif os.path.isdir(file_path): shutil.rmtree(file_path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def reverse_dict(dictionary):\n",
    "    return {v: k for k, v in dictionary.items()}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def is_tuple(o): return isinstance(o, tuple)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def itemify(*o, tup_id=None):\n",
    "    o = [o_ for o_ in L(*o) if o_ is not None]\n",
    "    items = L(o).zip()\n",
    "    if tup_id is not None: return L([item[tup_id] for item in items])\n",
    "    else: return items"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(1, 4), (2, 5), (3, 6)]\n",
      "[(1,), (2,), (3,)]\n",
      "[(1, 4), (2, 5), (3, 6)]\n"
     ]
    }
   ],
   "source": [
    "a = [1, 2, 3]\n",
    "b = [4, 5, 6]\n",
    "print(itemify(a, b))\n",
    "test_eq(len(itemify(a, b)), len(a))\n",
    "a = [1, 2, 3]\n",
    "b = None\n",
    "print(itemify(a, b))\n",
    "test_eq(len(itemify(a, b)), len(a))\n",
    "a = [1, 2, 3]\n",
    "b = [4, 5, 6]\n",
    "c = None\n",
    "print(itemify(a, b, c))\n",
    "test_eq(len(itemify(a, b, c)), len(a))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def isnone(o):\n",
    "    return o is None\n",
    "\n",
    "def exists(o): return o is not None\n",
    "\n",
    "def ifelse(a, b, c):\n",
    "    \"`b` if `a` is True else `c`\"\n",
    "    return b if a else c"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = np.array(3)\n",
    "test_eq(isnone(a), False)\n",
    "test_eq(exists(a), True)\n",
    "b = None\n",
    "test_eq(isnone(b), True)\n",
    "test_eq(exists(b), False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def is_not_close(a, b, eps=1e-5):\n",
    "    \"Is `a` within `eps` of `b`\"\n",
    "    if hasattr(a, '__array__') or hasattr(b, '__array__'):\n",
    "        return (abs(a - b) > eps).all()\n",
    "    if isinstance(a, (Iterable, Generator)) or isinstance(b, (Iterable, Generator)):\n",
    "        return is_not_close(np.array(a), np.array(b), eps=eps)\n",
    "    return abs(a - b) > eps\n",
    "\n",
    "\n",
    "def test_not_close(a, b, eps=1e-5):\n",
    "    \"`test` that `a` is within `eps` of `b`\"\n",
    "    test(a, b, partial(is_not_close, eps=eps), 'not_close')\n",
    "\n",
    "\n",
    "def test_type(a, b):\n",
    "    return test_eq(type(a), type(b))\n",
    "\n",
    "\n",
    "def test_ok(f, *args, **kwargs):\n",
    "    try:\n",
    "        f(*args, **kwargs)\n",
    "        e = 0\n",
    "    except:\n",
    "        e = 1\n",
    "        pass\n",
    "    test_eq(e, 0)\n",
    "\n",
    "def test_not_ok(f, *args, **kwargs):\n",
    "    try:\n",
    "        f(*args, **kwargs)\n",
    "        e = 0\n",
    "    except:\n",
    "        e = 1\n",
    "        pass\n",
    "    test_eq(e, 1)\n",
    "\n",
    "def test_error(error, f, *args, **kwargs):\n",
    "    try: f(*args, **kwargs)\n",
    "    except Exception as e:\n",
    "        test_eq(str(e), error)\n",
    "\n",
    "def test_eq_nan(a,b):\n",
    "    \"`test` that `a==b` excluding nan values (valid for torch.Tensor and np.ndarray)\"\n",
    "    mask_a = torch.isnan(a) if isinstance(a, torch.Tensor) else np.isnan(a)\n",
    "    mask_b = torch.isnan(b) if isinstance(b, torch.Tensor) else np.isnan(b)\n",
    "    test(a[~mask_a],b[~mask_b],equals, '==')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def assert_fn(*args, **kwargs): assert False, 'assertion test'\n",
    "test_error('assertion test', assert_fn, 35, a=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def test_gt(a,b):\n",
    "    \"`test` that `a>b`\"\n",
    "    test(a,b,gt,'>')\n",
    "\n",
    "def test_ge(a,b):\n",
    "    \"`test` that `a>=b`\"\n",
    "    test(a,b,ge,'>')\n",
    "\n",
    "def test_lt(a,b):\n",
    "    \"`test` that `a>b`\"\n",
    "    test(a,b,lt,'<')\n",
    "\n",
    "def test_le(a,b):\n",
    "    \"`test` that `a>b`\"\n",
    "    test(a,b,le,'<=')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_ok(test_gt, 5, 4)\n",
    "test_not_ok(test_gt, 4, 4)\n",
    "test_ok(test_ge, 4, 4)\n",
    "test_not_ok(test_ge, 3, 4)\n",
    "\n",
    "test_ok(test_lt, 3, 4)\n",
    "test_not_ok(test_lt, 4, 4)\n",
    "test_ok(test_le, 4, 4)\n",
    "test_not_ok(test_le, 5, 4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "t = torch.rand(100)\n",
    "test_eq(t, t)\n",
    "test_eq_nan(t, t)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def stack(o, axis=0, retain=True):\n",
    "    if hasattr(o, '__array__'): return o\n",
    "    if isinstance(o[0], torch.Tensor):\n",
    "        return retain_type(torch.stack(tuple(o), dim=axis),  o[0]) if retain else torch.stack(tuple(o), dim=axis)\n",
    "    else:\n",
    "        return retain_type(np.stack(o, axis), o[0]) if retain else np.stack(o, axis)\n",
    "\n",
    "\n",
    "def stack_pad(o, padding_value=np.nan):\n",
    "    'Converts a an iterable into a numpy array using padding if necessary'\n",
    "    if not is_listy(o) or not is_array(o):\n",
    "        if not hasattr(o, \"ndim\"): o = np.asarray([o], dtype=object)\n",
    "        else: o = np.asarray(o, dtype=object)\n",
    "    o_ndim = 1\n",
    "    if o.ndim > 1:\n",
    "        o_ndim = o.ndim\n",
    "        o_shape = o.shape\n",
    "        o = o.flatten()\n",
    "    o = [oi if (is_array(oi) and oi.ndim > 0) or is_listy(oi) else [oi] for oi in o]\n",
    "    row_length = len(max(o, key=len))\n",
    "    result = np.full((len(o), row_length), padding_value)\n",
    "    for i,row in enumerate(o):\n",
    "        result[i, :len(row)] = row\n",
    "    if o_ndim > 1:\n",
    "        if row_length == 1:\n",
    "            result = result.reshape(*o_shape)\n",
    "        else:\n",
    "            result = result.reshape(*o_shape, row_length)\n",
    "    return result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "o = [[0,1,2], [4,5,6,7]]\n",
    "test_eq(stack_pad(o).shape, (1, 2, 4))\n",
    "test_eq(type(stack_pad(o)), np.ndarray)\n",
    "test_eq(np.isnan(stack_pad(o)).sum(), 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[3.]]\n",
      "[[4. 5.]]\n",
      "[[[ 0.  1.  2. nan]\n",
      "  [ 4.  5.  6.  7.]]]\n",
      "[[ 0. nan]\n",
      " [ 1.  2.]]\n",
      "[[[  0.  nan  nan  nan]\n",
      "  [ 10.  20.  nan  nan]\n",
      "  [100. 200. 300.  nan]]\n",
      "\n",
      " [[  0.   1.   2.   3.]\n",
      "  [ 10.  20.  nan  nan]\n",
      "  [100.  nan  nan  nan]]]\n",
      "[[ 0. nan]\n",
      " [10. 20.]]\n"
     ]
    }
   ],
   "source": [
    "o = 3\n",
    "print(stack_pad(o))\n",
    "test_eq(stack_pad(o), np.array([[3.]]))\n",
    "o = [4,5]\n",
    "print(stack_pad(o))\n",
    "test_eq(stack_pad(o), np.array([[4., 5.]]))\n",
    "o = [[0,1,2], [4,5,6,7]]\n",
    "print(stack_pad(o))\n",
    "o = np.array([0, [1,2]], dtype=object)\n",
    "print(stack_pad(o))\n",
    "o = np.array([[[0], [10, 20], [100, 200, 300]], [[0, 1, 2, 3], [10, 20], [100]]], dtype=object)\n",
    "print(stack_pad(o))\n",
    "o = np.array([0, [10, 20]], dtype=object)\n",
    "print(stack_pad(o))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = np.random.rand(2, 3, 4)\n",
    "t = torch.from_numpy(a)\n",
    "test_eq_type(stack(itemify(a, tup_id=0)), a)\n",
    "test_eq_type(stack(itemify(t, tup_id=0)), t)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def pad_sequences(\n",
    "    o, # Iterable object\n",
    "    maxlen:int=None, # Optional max length of the output. If None, max length of the longest individual sequence.\n",
    "    dtype:(str, type)=np.float64, # Type of the output sequences. To pad sequences with variable length strings, you can use object.\n",
    "    padding:str='pre', # 'pre' or 'post' pad either before or after each sequence.\n",
    "    truncating:str='pre', # 'pre' or 'post' remove values from sequences larger than maxlen, either at the beginning or at the end of the sequences.\n",
    "    padding_value:float=np.nan, # Value used for padding.\n",
    "):\n",
    "    \"Transforms an iterable with sequences into a 3d numpy array using padding or truncating sequences if necessary\"\n",
    "\n",
    "    assert padding in ['pre', 'post']\n",
    "    assert truncating in ['pre', 'post']\n",
    "    assert is_iter(o)\n",
    "\n",
    "    if not is_array(o):\n",
    "        o = [to2darray(oi) for oi in o]\n",
    "    seq_len = maxlen or max(o, key=len).shape[-1]\n",
    "    result = np.full((len(o), o[0].shape[-2], seq_len), padding_value, dtype=dtype)\n",
    "    for i,values in enumerate(o):\n",
    "        if truncating == 'pre':\n",
    "            values = values[..., -seq_len:]\n",
    "        else:\n",
    "            values = values[..., :seq_len]\n",
    "        if padding == 'pre':\n",
    "            result[i, :, -values.shape[-1]:] = values\n",
    "        else:\n",
    "            result[i, :, :values.shape[-1]] = values\n",
    "    return result"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This function transforms a list (of length n_samples) of sequences into a 3d numpy array of shape:\n",
    "\n",
    "```bash\n",
    "                          [n_samples x n_vars x seq_len]\n",
    "```\n",
    "\n",
    "seq_len is either the maxlen argument if provided, or the length of the longest sequence in the list.\n",
    "\n",
    "Sequences that are shorter than seq_len are padded with value until they are seq_len long.\n",
    "\n",
    "Sequences longer than seq_len are truncated so that they fit the desired length.\n",
    "\n",
    "The position where padding or truncation happens is determined by the arguments padding and truncating, respectively. Pre-padding or removing values from the beginning of the sequence is the default.\n",
    "\n",
    "Input sequences to pad_sequences may be have 1, 2 or 3 dimensions:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[  2.,   3.,   4.,   5.]],\n",
       "\n",
       "       [[  0.,  10.,  20.,  nan]],\n",
       "\n",
       "       [[  0., 100.,  nan,  nan]]])"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 1 dim\n",
    "a1 = np.arange(6)\n",
    "a2 = np.arange(3) * 10\n",
    "a3 = np.arange(2) * 100\n",
    "o  = [a1, a2, a3]\n",
    "padded_o = pad_sequences(o, maxlen=4, dtype=np.float64, padding='post', truncating='pre', padding_value=np.nan)\n",
    "test_eq(padded_o.shape, (3, 1, 4))\n",
    "padded_o"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[  2.,   3.,   4.,   5.],\n",
       "        [  8.,   9.,  10.,  11.]],\n",
       "\n",
       "       [[  0.,  10.,  20.,  nan],\n",
       "        [ 30.,  40.,  50.,  nan]],\n",
       "\n",
       "       [[  0., 100.,  nan,  nan],\n",
       "        [200., 300.,  nan,  nan]]])"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 2 dim\n",
    "a1 = np.arange(12).reshape(2, 6)\n",
    "a2 = np.arange(6).reshape(2, 3) * 10\n",
    "a3 = np.arange(4).reshape(2, 2) * 100\n",
    "o  = [a1, a2, a3]\n",
    "padded_o = pad_sequences(o, maxlen=4, dtype=np.float64, padding='post', truncating='pre', padding_value=np.nan)\n",
    "test_eq(padded_o.shape, (3, 2, 4))\n",
    "padded_o"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[  0.,   1.,   2.,   3.,   4.],\n",
       "        [  5.,   6.,   7.,   8.,   9.]],\n",
       "\n",
       "       [[ nan,  nan,   0.,  10.,  20.],\n",
       "        [ nan,  nan,  30.,  40.,  50.]],\n",
       "\n",
       "       [[ nan,  nan,  nan,   0., 100.],\n",
       "        [ nan,  nan,  nan, 200., 300.]]])"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 3 dim\n",
    "a1 = np.arange(10).reshape(1, 2, 5)\n",
    "a2 = np.arange(6).reshape(1, 2, 3) * 10\n",
    "a3 = np.arange(4).reshape(1, 2, 2) * 100\n",
    "o  = [a1, a2, a3]\n",
    "padded_o = pad_sequences(o, maxlen=None, dtype=np.float64, padding='pre', truncating='pre', padding_value=np.nan)\n",
    "test_eq(padded_o.shape, (3, 2, 5))\n",
    "padded_o"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[  1.,   2.,   3.,   4.],\n",
       "        [  6.,   7.,   8.,   9.]],\n",
       "\n",
       "       [[ nan,   0.,  10.,  20.],\n",
       "        [ nan,  30.,  40.,  50.]],\n",
       "\n",
       "       [[ nan,  nan,   0., 100.],\n",
       "        [ nan,  nan, 200., 300.]]])"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 3 dim\n",
    "a1 = np.arange(10).reshape(1, 2, 5)\n",
    "a2 = np.arange(6).reshape(1, 2, 3) * 10\n",
    "a3 = np.arange(4).reshape(1, 2, 2) * 100\n",
    "o  = [a1, a2, a3]\n",
    "padded_o = pad_sequences(o, maxlen=4, dtype=np.float64, padding='pre', truncating='pre', padding_value=np.nan)\n",
    "test_eq(padded_o.shape, (3, 2, 4))\n",
    "padded_o"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[  1.,   2.,   3.,   4.],\n",
       "        [  6.,   7.,   8.,   9.]],\n",
       "\n",
       "       [[  0.,  10.,  20.,  nan],\n",
       "        [ 30.,  40.,  50.,  nan]],\n",
       "\n",
       "       [[  0., 100.,  nan,  nan],\n",
       "        [200., 300.,  nan,  nan]]])"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 3 dim\n",
    "a1 = np.arange(10).reshape(1, 2, 5)\n",
    "a2 = np.arange(6).reshape(1, 2, 3) * 10\n",
    "a3 = np.arange(4).reshape(1, 2, 2) * 100\n",
    "o  = [a1, a2, a3]\n",
    "padded_o = pad_sequences(o, maxlen=4, dtype=np.float64, padding='post', truncating='pre', padding_value=np.nan)\n",
    "test_eq(padded_o.shape, (3, 2, 4))\n",
    "padded_o"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[  0.,   1.,   2.,   3.],\n",
       "        [  5.,   6.,   7.,   8.]],\n",
       "\n",
       "       [[  0.,  10.,  20.,  nan],\n",
       "        [ 30.,  40.,  50.,  nan]],\n",
       "\n",
       "       [[  0., 100.,  nan,  nan],\n",
       "        [200., 300.,  nan,  nan]]])"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 3 dim\n",
    "a1 = np.arange(10).reshape(1, 2, 5)\n",
    "a2 = np.arange(6).reshape(1, 2, 3) * 10\n",
    "a3 = np.arange(4).reshape(1, 2, 2) * 100\n",
    "o  = [a1, a2, a3]\n",
    "padded_o = pad_sequences(o, maxlen=4, dtype=np.float64, padding='post', truncating='post', padding_value=np.nan)\n",
    "test_eq(padded_o.shape, (3, 2, 4))\n",
    "padded_o"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[  0.,   1.,   2.,   3.,   4.,   5.],\n",
       "        [  6.,   7.,   8.,   9.,  10.,  11.]],\n",
       "\n",
       "       [[  0.,  10.,  20.,  nan,  nan,  nan],\n",
       "        [ 30.,  40.,  50.,  nan,  nan,  nan]],\n",
       "\n",
       "       [[  0., 100.,  nan,  nan,  nan,  nan],\n",
       "        [200., 300.,  nan,  nan,  nan,  nan]]])"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# iterable is a list of lists\n",
    "a1 = np.arange(12).reshape(1, 2, 6).tolist()\n",
    "a2 = (np.arange(6).reshape(1, 2, 3) * 10).tolist()\n",
    "a3 = (np.arange(4).reshape(1, 2, 2) * 100).tolist()\n",
    "o  = [a1, a2, a3]\n",
    "padded_o = pad_sequences(o, maxlen=None, dtype=np.float64, padding='post', truncating='pre', padding_value=np.nan)\n",
    "test_eq(padded_o.shape, (3, 2, 6))\n",
    "padded_o"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def match_seq_len(*arrays):\n",
    "    max_len = stack([x.shape[-1] for x in arrays]).max()\n",
    "    return [np.pad(x, pad_width=((0,0), (0,0), (max_len - x.shape[-1], 0)), mode='constant', constant_values=0) for x in arrays]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = np.random.rand(10, 5, 8)\n",
    "b = np.random.rand(3, 5, 10)\n",
    "c, d = match_seq_len(a, b)\n",
    "test_eq(c.shape[-1], d.shape[-1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def random_shuffle(o, random_state=None):\n",
    "    import sklearn\n",
    "    res = sklearn.utils.shuffle(o, random_state=random_state)\n",
    "    if isinstance(o, L): return L(list(res))\n",
    "    return res"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = np.arange(10)\n",
    "test_eq_type(random_shuffle(a, 1), np.array([2, 9, 6, 4, 0, 3, 1, 7, 8, 5]))\n",
    "t = torch.arange(10)\n",
    "test_eq_type(random_shuffle(t, 1), tensor([2, 9, 6, 4, 0, 3, 1, 7, 8, 5]))\n",
    "l = list(a)\n",
    "test_eq(random_shuffle(l, 1), [2, 9, 6, 4, 0, 3, 1, 7, 8, 5])\n",
    "l2 = L(l)\n",
    "test_eq_type(random_shuffle(l2, 1), L([2, 9, 6, 4, 0, 3, 1, 7, 8, 5]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def cat2int(o):\n",
    "    from fastai.data.transforms import Categorize\n",
    "    from fastai.data.core import TfmdLists\n",
    "    cat = Categorize()\n",
    "    cat.setup(o)\n",
    "    return stack(TfmdLists(o, cat)[:])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = np.array(['b', 'a', 'a', 'b', 'a', 'b', 'a'])\n",
    "test_eq_type(cat2int(a), TensorCategory([1, 0, 0, 1, 0, 1, 0]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "TensorBase([1, 2, 3])"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "TensorBase([1,2,3])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def cycle_dl(dl, show_progress_bar=True):\n",
    "    try:\n",
    "        if show_progress_bar:\n",
    "            for _ in progress_bar(dl): _\n",
    "        else:\n",
    "            for _ in dl: _\n",
    "    except KeyboardInterrupt:\n",
    "        pass\n",
    "\n",
    "\n",
    "def cycle_dl_to_device(dl, show_progress_bar=True):\n",
    "    try:\n",
    "        if show_progress_bar:\n",
    "            for bs in progress_bar(dl): [b.to(default_device()) for b in bs]\n",
    "        else:\n",
    "            for bs in dl: [b.to(default_device()) for b in bs]\n",
    "    except KeyboardInterrupt:\n",
    "        pass\n",
    "\n",
    "def cycle_dl_estimate(dl, iters=10):\n",
    "    iters = min(iters, len(dl))\n",
    "    iterator = iter(dl)\n",
    "    timer.start(False)\n",
    "    try:\n",
    "        for _ in range(iters): next(iterator)\n",
    "    except KeyboardInterrupt:\n",
    "        pass\n",
    "    t = timer.stop()\n",
    "    return (t/iters * len(dl)).total_seconds()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def cache_data(o, slice_len=10_000, verbose=False):\n",
    "    start = 0\n",
    "    n_loops = (len(o) - 1) // slice_len + 1\n",
    "    pv(f'{n_loops} loops', verbose)\n",
    "    timer.start(False)\n",
    "    for i in range(n_loops):\n",
    "        o[slice(start,start + slice_len)]\n",
    "        if verbose and (i+1) % 10 == 0: print(f'{i+1:4} elapsed time: {timer.elapsed()}')\n",
    "        start += slice_len\n",
    "    pv(f'{i+1:4} total time  : {timer.stop()}\\n', verbose)\n",
    "\n",
    "memmap2cache =  cache_data\n",
    "cache_memmap = cache_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def get_func_defaults(f):\n",
    "    import inspect\n",
    "    fa = inspect.getfullargspec(f)\n",
    "    if fa.defaults is None: return dict(zip(fa.args, [''] * (len(fa.args))))\n",
    "    else: return dict(zip(fa.args, [''] * (len(fa.args) - len(fa.defaults)) + list(fa.defaults)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def get_idx_from_df_col_vals(df, col, val_list):\n",
    "    return [df[df[col] == val].index[0] for val in val_list]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def get_sublist_idxs(aList, bList):\n",
    "    \"Get idxs that when applied to aList will return bList. aList must contain all values in bList\"\n",
    "    sorted_aList = aList[np.argsort(aList)]\n",
    "    return np.argsort(aList)[np.searchsorted(sorted_aList, bList)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = np.array([3, 5, 7, 1, 9, 8, 6, 2])\n",
    "y = np.array([6, 1, 5, 7])\n",
    "idx = get_sublist_idxs(x, y)\n",
    "test_eq(x[idx], y)\n",
    "x = np.array([3, 5, 7, 1, 9, 8, 6, 6, 2])\n",
    "y = np.array([6, 1, 5, 7, 5])\n",
    "idx = get_sublist_idxs(x, y)\n",
    "test_eq(x[idx], y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def flatten_list(l):\n",
    "    return [item for sublist in l for item in sublist]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def display_pd_df(df, max_rows:Union[bool, int]=False, max_columns:Union[bool, int]=False):\n",
    "    if max_rows:\n",
    "        old_max_rows = pd.get_option('display.max_rows')\n",
    "        if max_rows is not True and isinstance(max_rows, Integral): pd.set_option('display.max_rows', max_rows)\n",
    "        else: pd.set_option('display.max_rows', df.shape[0])\n",
    "    if max_columns:\n",
    "        old_max_columns = pd.get_option('display.max_columns')\n",
    "        if max_columns is not True and isinstance(max_columns, Integral): pd.set_option('display.max_columns', max_columns)\n",
    "        else: pd.set_option('display.max_columns', df.shape[1])\n",
    "    display(df)\n",
    "    if max_rows: pd.set_option('display.max_rows', old_max_rows)\n",
    "    if max_columns: pd.set_option('display.max_columns', old_max_columns)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>...</th>\n",
       "      <th>24</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.436034</td>\n",
       "      <td>...</td>\n",
       "      <td>0.231616</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>69</th>\n",
       "      <td>0.633051</td>\n",
       "      <td>...</td>\n",
       "      <td>0.051762</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>70 rows × 25 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          0   ...        24\n",
       "0   0.436034  ...  0.231616\n",
       "..       ...  ...       ...\n",
       "69  0.633051  ...  0.051762\n",
       "\n",
       "[70 rows x 25 columns]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "old_max_rows, old_max_columns = pd.get_option('display.max_rows'), pd.get_option('display.max_columns')\n",
    "df = pd.DataFrame(np.random.rand(70, 25))\n",
    "display_pd_df(df, max_rows=2, max_columns=3)\n",
    "test_eq(old_max_rows, pd.get_option('display.max_rows'))\n",
    "test_eq(old_max_columns, pd.get_option('display.max_columns'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def ttest(data1, data2, equal_var=False):\n",
    "    \"Calculates t-statistic and p-value based on 2 sample distributions\"\n",
    "    t_stat, p_value = ttest_ind(data1, data2, equal_var=equal_var)\n",
    "    return t_stat, np.sign(t_stat) * p_value\n",
    "\n",
    "def kstest(data1, data2, alternative='two-sided', mode='auto', by_axis=None):\n",
    "    \"\"\"Performs the two-sample Kolmogorov-Smirnov test for goodness of fit.\n",
    "\n",
    "    Parameters\n",
    "    data1, data2: Two arrays of sample observations assumed to be drawn from a continuous distributions. Sample sizes can be different.\n",
    "    alternative: {‘two-sided’, ‘less’, ‘greater’}, optional. Defines the null and alternative hypotheses. Default is ‘two-sided’.\n",
    "    mode: {‘auto’, ‘exact’, ‘asymp’}, optional. Defines the method used for calculating the p-value.\n",
    "    by_axis (optional, int): for arrays with more than 1 dimension, the test will be run for each variable in that axis if by_axis is not None.\n",
    "    \"\"\"\n",
    "    if by_axis is None:\n",
    "        stat, p_value = ks_2samp(data1.flatten(), data2.flatten(), alternative=alternative, mode=mode)\n",
    "        return stat, np.sign(stat) * p_value\n",
    "    else:\n",
    "        assert data1.shape[by_axis] == data2.shape[by_axis], f\"both arrays must have the same size along axis {by_axis}\"\n",
    "        stats, p_values = [], []\n",
    "        for i in range(data1.shape[by_axis]):\n",
    "            d1 = np.take(data1, indices=i, axis=by_axis)\n",
    "            d2 = np.take(data2, indices=i, axis=by_axis)\n",
    "            stat, p_value = ks_2samp(d1.flatten(), d2.flatten(), alternative=alternative, mode=mode)\n",
    "            stats.append(stat)\n",
    "            p_values.append(np.sign(stat) * p_value)\n",
    "        return stats, p_values\n",
    "\n",
    "\n",
    "def tscore(o):\n",
    "    if o.std() == 0: return 0\n",
    "    else: return np.sqrt(len(o)) * o.mean() / o.std()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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y8N1LZ5rWh5flOtaX1/fp+MKf8PpkCFDYvLkybFu3bqefd3d3bFu3bqYMWNG0csBAFWmLN92WbhwYTQ1NcWUKVNi2rRpsWzZsujs7Iz58+eXYzkAoIqUJT6+853vxHvvvRe33HJL7N69O772ta/F008/HaNHjz7mc9fW1sbixYs/9a0ajo3rWh6ua3m4rsVzTcvDdT20mlKpLz8TAwBQDH/bBQBIJT4AgFTiAwBIJT4AgFRVGx87d+6Ma665JhobG2PYsGFx+umnx+LFi2P//v2VHq3q3X777XH++efH8ccf36df+MahLV++PCZMmBBDhw6N6dOnx0svvVTpkarehg0b4rLLLouxY8dGTU1NPPbYY5Ueqeq1trbG1KlTo66uLkaNGhXz5s2L119/vdJjVb0VK1bEeeed1/PLxWbMmBFPPfVUpcfqN6o2Pl577bXo7u6O+++/P1599dX47W9/G/fdd1/84he/qPRoVW///v1xxRVXxHXXXVfpUarWo48+GgsXLozFixfHtm3bYtKkSXHJJZfE3r17Kz1aVevs7IxJkybF8uXLKz3KgPH8889Hc3NzbNq0KZ599tn4+OOP4+KLL47Ozs5Kj1bVxo0bF0uXLo2tW7fGli1b4lvf+lZcfvnl8eqrr1Z6tH5hQP2o7Z133hkrVqyIt956q9KjDAgPPfRQLFiwID744INKj1J1pk+fHlOnTo177703Iv77W34bGhrihhtuiJaWlgpPNzDU1NTE2rVrY968eZUeZUB57733YtSoUfH888/HBRdcUOlxBpQRI0bEnXfeGddcc02lR6m4qr3zcSjt7e0xYsSISo/BF9z+/ftj69atMXv27J59gwYNitmzZ8fGjRsrOBkcWXt7e0SE19ICHThwINasWROdnZ3+zMj/qvhftS3Kjh074p577om77rqr0qPwBfevf/0rDhw48Knf6Dt69Oh47bXXKjQVHFl3d3csWLAgZs6cGRMnTqz0OFXv5ZdfjhkzZsS+ffvixBNPjLVr18bZZ59d6bH6hX5356OlpSVqamoOux38Ar5r16749re/HVdccUVce+21FZq8f/s81xX4Ymlubo5XXnkl1qxZU+lRBoSvfOUrsX379njxxRfjuuuui6ampvjHP/5R6bH6hX535+OnP/1pfP/73z/sMV/+8pd7/vO7774bs2bNivPPPz8eeOCBMk9XvY72uvL5nXLKKTF48ODYs2dPr/179uyJMWPGVGgqOLzrr78+nnjiidiwYUOMGzeu0uMMCEOGDIkzzjgjIiImT54cmzdvjt/97ndx//33V3iyyut38TFy5MgYOXJkn47dtWtXzJo1KyZPnhwrV66MQYP63Y2cfuNorivHZsiQITF58uRYt25dz5shu7u7Y926dXH99ddXdjg4SKlUihtuuCHWrl0b69evj8bGxkqPNGB1d3dHV1dXpcfoF/pdfPTVrl274sILL4zTTjst7rrrrnjvvfd6nvP/Lo/NO++8E++//3688847ceDAgdi+fXtERJxxxhlx4oknVna4KrFw4cJoamqKKVOmxLRp02LZsmXR2dkZ8+fPr/RoVe2jjz6KHTt29Dx+++23Y/v27TFixIgYP358BSerXs3NzbF69ep4/PHHo66uLnbv3h0REfX19TFs2LAKT1e9Fi1aFHPmzInx48fHhx9+GKtXr47169fHM888U+nR+odSlVq5cmUpIg65cWyampoOeV2fe+65So9WVe65557S+PHjS0OGDClNmzattGnTpkqPVPWee+65Q/53s6mpqdKjVa3Peh1duXJlpUeraldffXXptNNOKw0ZMqQ0cuTI0kUXXVT6y1/+Uumx+o0B9Xs+AID+z5skAIBU4gMASCU+AIBU4gMASCU+AIBU4gMASCU+AIBU4gMASCU+AIBU4gMASCU+AIBU4gMASPU/bf3YntcPb7EAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "(3.2032580975458362, 0.0016675645608969255)"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.random.normal(0.5, 1, 100)\n",
    "b = np.random.normal(0.15, .5, 50)\n",
    "plt.hist(a, 50)\n",
    "plt.hist(b, 50)\n",
    "plt.show()\n",
    "ttest(a,b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.22333333333333333, 0.02452803315700394)"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.random.normal(0.5, 1, (100,3))\n",
    "b = np.random.normal(0.5, 1, (50,))\n",
    "kstest(a,b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.31, 0.0004061333917852463)"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.random.normal(0.5, 1, (100,3))\n",
    "b = np.random.normal(0.15, .5, (50,))\n",
    "kstest(a,b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "([0.22,\n",
       "  0.16333333333333333,\n",
       "  0.16333333333333333,\n",
       "  0.18666666666666668,\n",
       "  0.21666666666666667],\n",
       " [8.994053173844458e-07,\n",
       "  0.0006538374533623971,\n",
       "  0.0006538374533623971,\n",
       "  5.522790313356146e-05,\n",
       "  1.4007759411179028e-06])"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data1 = np.random.normal(0,1,(100, 5, 3))\n",
    "data2 = np.random.normal(0,2,(100, 5, 3))\n",
    "kstest(data1, data2, by_axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4.33309224863388, tensor(5.7798))"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.random.normal(0.5, 1, 100)\n",
    "t = torch.normal(0.5, 1, (100, ))\n",
    "tscore(a), tscore(t)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.12809436779096517, 0.11786378637863786)"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#|export\n",
    "def pcc(a, b):\n",
    "    return pearsonr(a, b)[0]\n",
    "\n",
    "def scc(a, b):\n",
    "    return spearmanr(a, b)[0]\n",
    "\n",
    "a = np.random.normal(0.5, 1, 100)\n",
    "b = np.random.normal(0.15, .5, 100)\n",
    "pcc(a, b), scc(a, b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def remove_fn(fn, verbose=False):\n",
    "    \"Removes a file (fn) if exists\"\n",
    "    try:\n",
    "        os.remove(fn)\n",
    "        pv(f'{fn} file removed', verbose)\n",
    "    except OSError:\n",
    "        pv(f'{fn} does not exist', verbose)\n",
    "        pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def npsave(array_fn, array, verbose=True):\n",
    "    remove_fn(array_fn, verbose)\n",
    "    pv(f'saving {array_fn}...', verbose)\n",
    "    np.save(array_fn, array)\n",
    "    pv(f'...{array_fn} saved', verbose)\n",
    "\n",
    "np_save = npsave"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data/remove_fn_test.npy does not exist\n",
      "saving data/remove_fn_test.npy...\n",
      "...data/remove_fn_test.npy saved\n",
      "data/remove_fn_test.npy file removed\n",
      "data/remove_fn_test.npy does not exist\n"
     ]
    }
   ],
   "source": [
    "fn = 'data/remove_fn_test.npy'\n",
    "a = np.zeros(1)\n",
    "npsave(fn, a)\n",
    "del a\n",
    "np.load(fn, mmap_mode='r+')\n",
    "remove_fn(fn, True)\n",
    "remove_fn(fn, True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def permute_2D(array, axis=None):\n",
    "    \"Permute rows or columns in an array. This can be used, for example, in feature permutation\"\n",
    "    if axis == 0: return array[np.random.randn(*array.shape).argsort(axis=0), np.arange(array.shape[-1])[None, :]]\n",
    "    elif axis == 1 or axis == -1: return array[np.arange(len(array))[:,None], np.random.randn(*array.shape).argsort(axis=1)]\n",
    "    return array[np.random.randn(*array.shape).argsort(axis=0), np.random.randn(*array.shape).argsort(axis=1)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "s = np.arange(100 * 50).reshape(100, 50)\n",
    "test_eq(permute_2D(s, axis=0).mean(0), s.mean(0))\n",
    "test_ne(permute_2D(s, axis=0), s)\n",
    "test_eq(permute_2D(s, axis=1).mean(1), s.mean(1))\n",
    "test_ne(permute_2D(s, axis=1), s)\n",
    "test_ne(permute_2D(s), s)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def random_normal():\n",
    "    \"Returns a number between -1 and 1 with a normal distribution\"\n",
    "    while True:\n",
    "        o = np.random.normal(loc=0., scale=1/3)\n",
    "        if abs(o) <= 1: break\n",
    "    return o\n",
    "\n",
    "def random_half_normal():\n",
    "    \"Returns a number between 0 and 1 with a half-normal distribution\"\n",
    "    while True:\n",
    "        o = abs(np.random.normal(loc=0., scale=1/3))\n",
    "        if o <= 1: break\n",
    "    return o\n",
    "\n",
    "def random_normal_tensor(shape=1, device=None):\n",
    "    \"Returns a tensor of a predefined shape between -1 and 1 with a normal distribution\"\n",
    "    return torch.empty(shape, device=device).normal_(mean=0, std=1/3).clamp_(-1, 1)\n",
    "\n",
    "def random_half_normal_tensor(shape=1, device=None):\n",
    "    \"Returns a tensor of a predefined shape between 0 and 1 with a half-normal distribution\"\n",
    "    return abs(torch.empty(shape, device=device).normal_(mean=0, std=1/3)).clamp_(0, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "from matplotlib.backends.backend_agg import FigureCanvasAgg\n",
    "\n",
    "def default_dpi():\n",
    "    DPI = plt.gcf().get_dpi()\n",
    "    plt.close()\n",
    "    return int(DPI)\n",
    "\n",
    "def get_plot_fig(size=None, dpi=default_dpi()):\n",
    "    fig = plt.figure(figsize=(size / dpi, size / dpi), dpi=dpi, frameon=False) if size else plt.figure()\n",
    "    ax = fig.add_axes([0,0,1,1])\n",
    "    ax.spines['top'].set_visible(False)\n",
    "    ax.spines['right'].set_visible(False)\n",
    "    ax.spines['bottom'].set_visible(False)\n",
    "    ax.spines['left'].set_visible(False)\n",
    "    ax.get_xaxis().set_visible(False)\n",
    "    ax.get_yaxis().set_visible(False)\n",
    "    config = plt.gcf()\n",
    "    plt.close('all')\n",
    "    return config\n",
    "\n",
    "def fig2buf(fig):\n",
    "    canvas = FigureCanvasAgg(fig)\n",
    "    fig.canvas.draw()\n",
    "    return np.asarray(canvas.buffer_rgba())[..., :3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "100"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "default_dpi()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def plot_scatter(x, y, deg=1):\n",
    "    linreg = linregress(x, y)\n",
    "    plt.scatter(x, y, label=f'R2:{linreg.rvalue:.2f}', color='lime', edgecolor='black', alpha=.5)\n",
    "    plt.plot(np.unique(x), np.poly1d(np.polyfit(x, y, deg))(np.unique(x)), color='r')\n",
    "    plt.legend(loc='best')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "a = np.random.rand(100)\n",
    "b = np.random.rand(100)**2\n",
    "plot_scatter(a, b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def get_idxs(o, aList): return array([o.tolist().index(v) for v in aList])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = random_shuffle(np.arange(100, 200))\n",
    "b = np.random.choice(a, 10, False)\n",
    "idxs = get_idxs(a, b)\n",
    "test_eq(a[idxs], b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def apply_cmap(o, cmap):\n",
    "    o = toarray(o)\n",
    "    out = plt.get_cmap(cmap)(o)[..., :3]\n",
    "    out = tensor(out).squeeze(1)\n",
    "    return out.permute(0, 3, 1, 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = np.random.rand(16, 1, 40, 50)\n",
    "s = L(a.shape)\n",
    "s[1] = 3\n",
    "test_eq(L(apply_cmap(a, 'viridis').shape), s)\n",
    "\n",
    "s[0] = 1\n",
    "a = np.random.rand(1, 40, 50)\n",
    "test_eq(L(apply_cmap(a, 'viridis').shape), s)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def torch_tile(a, n_tile, dim=0):\n",
    "    if ismin_torch(\"1.10\") and dim == 0:\n",
    "        if isinstance(n_tile, tuple):\n",
    "            return torch.tile(a, n_tile)\n",
    "        return torch.tile(a, (n_tile,))\n",
    "    init_dim = a.size(dim)\n",
    "    repeat_idx = [1] * a.dim()\n",
    "    repeat_idx[dim] = n_tile\n",
    "    a = a.repeat(*(repeat_idx))\n",
    "    order_index = torch.cat([init_dim * torch.arange(n_tile) + i for i in range(init_dim)]).to(device=a.device)\n",
    "    return torch.index_select(a, dim, order_index)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_eq(torch_tile(torch.arange(2), 3), tensor([0, 1, 0, 1, 0, 1]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def to_tsfresh_df(ts):\n",
    "    r\"\"\"Prepares a time series (Tensor/ np.ndarray) to be used as a tsfresh dataset to allow feature extraction\"\"\"\n",
    "    ts = to3d(ts)\n",
    "    if isinstance(ts, np.ndarray):\n",
    "        ids = np.repeat(np.arange(len(ts)), ts.shape[-1]).reshape(-1,1)\n",
    "        joint_ts =  ts.transpose(0,2,1).reshape(-1, ts.shape[1])\n",
    "        cols = ['id'] + np.arange(ts.shape[1]).tolist()\n",
    "        df = pd.DataFrame(np.concatenate([ids, joint_ts], axis=1), columns=cols)\n",
    "    elif isinstance(ts, torch.Tensor):\n",
    "        ids = torch_tile(torch.arange(len(ts)), ts.shape[-1]).reshape(-1,1)\n",
    "        joint_ts =  ts.transpose(1,2).reshape(-1, ts.shape[1])\n",
    "        cols = ['id']+np.arange(ts.shape[1]).tolist()\n",
    "        df = pd.DataFrame(torch.cat([ids, joint_ts], dim=1).numpy(), columns=cols)\n",
    "    df['id'] = df['id'].astype(int)\n",
    "    df.reset_index(drop=True, inplace=True)\n",
    "    return df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "ts = torch.rand(16, 3, 20)\n",
    "a = to_tsfresh_df(ts)\n",
    "ts = ts.numpy()\n",
    "b = to_tsfresh_df(ts)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def pcorr(a, b):\n",
    "    return pearsonr(a, b)\n",
    "\n",
    "def scorr(a, b):\n",
    "    corr = spearmanr(a, b)\n",
    "    return corr[0], corr[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def torch_diff(t, lag=1, pad=True, append=0):\n",
    "    import torch.nn.functional as F\n",
    "    diff = t[..., lag:] - t[..., :-lag]\n",
    "    if pad:\n",
    "        return F.pad(diff, (lag, append))\n",
    "    else:\n",
    "        return diff"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "t = torch.arange(24).reshape(2,3,4)\n",
    "test_eq(torch_diff(t, 1)[..., 1:].float().mean(), 1.)\n",
    "test_eq(torch_diff(t, 2)[..., 2:].float().mean(), 2.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def get_outliers_IQR(o, axis=None, quantile_range=(25.0, 75.0)):\n",
    "    if isinstance(o, torch.Tensor):\n",
    "        Q1 = torch.nanquantile(o, quantile_range[0]/100, axis=axis, keepdims=axis is not None)\n",
    "        Q3 = torch.nanquantile(o, quantile_range[1]/100, axis=axis, keepdims=axis is not None)\n",
    "    else:\n",
    "        Q1 = np.nanpercentile(o, quantile_range[0], axis=axis, keepdims=axis is not None)\n",
    "        Q3 = np.nanpercentile(o, quantile_range[1], axis=axis, keepdims=axis is not None)\n",
    "    IQR = Q3 - Q1\n",
    "    return Q1 - 1.5 * IQR, Q3 + 1.5 * IQR\n",
    "\n",
    "def clip_outliers(o, axis=None):\n",
    "    min_outliers, max_outliers = get_outliers_IQR(o, axis=axis)\n",
    "    if isinstance(o, (np.ndarray, pd.core.series.Series)):\n",
    "        return np.clip(o, min_outliers, max_outliers)\n",
    "    elif isinstance(o, torch.Tensor):\n",
    "        return torch.clamp(o, min_outliers, max_outliers)\n",
    "\n",
    "def get_percentile(o, percentile, axis=None):\n",
    "    if isinstance(o, torch.Tensor):\n",
    "        return torch.nanquantile(o, percentile/100, axis=axis, keepdims=axis is not None)\n",
    "    else:\n",
    "        return np.nanpercentile(o, percentile, axis=axis, keepdims=axis is not None)\n",
    "\n",
    "def torch_clamp(o, min=None, max=None):\n",
    "    r\"\"\"Clamp torch.Tensor using 1 or multiple dimensions\"\"\"\n",
    "    if min is not None: o = torch.max(o, min)\n",
    "    if max is not None: o = torch.min(o, max)\n",
    "    return o"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "t = torch.randn(2,3,100)\n",
    "test_eq(type(get_outliers_IQR(t, -1)[0]), torch.Tensor)\n",
    "a = t.numpy()\n",
    "test_eq(type(get_outliers_IQR(a, -1)[0]), np.ndarray)\n",
    "test_close(get_percentile(t, 25).numpy(), get_percentile(a, 25))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def get_robustscale_params(o, sel_vars=None, not_sel_vars=None, by_var=True, percentiles=(25, 75), eps=1e-6):\n",
    "    \"Calculates median and inter-quartile range required to robust scaler inputs\"\n",
    "    assert o.ndim == 3\n",
    "    if by_var:\n",
    "        axis=(0,2)\n",
    "        keepdims=True\n",
    "    else:\n",
    "        axis=None\n",
    "        keepdims=False\n",
    "    median = np.nanpercentile(o, 50, axis=axis, keepdims=keepdims)\n",
    "    Q1 = np.nanpercentile(o, percentiles[0], axis=axis, keepdims=keepdims)\n",
    "    Q3 = np.nanpercentile(o, percentiles[1], axis=axis, keepdims=keepdims)\n",
    "    IQR = Q3 - Q1\n",
    "\n",
    "    if eps is not None:\n",
    "        IQR = np.clip(IQR, eps, None)\n",
    "\n",
    "    if sel_vars is not None:\n",
    "        not_sel_vars = np.asarray([v for v in np.arange(o.shape[1]) if v not in sel_vars])\n",
    "\n",
    "    if not_sel_vars is not None:\n",
    "        median[:, not_sel_vars] = 0\n",
    "        IQR[:, not_sel_vars] = 1\n",
    "\n",
    "    return median, IQR\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = np.random.rand(16, 3, 100)\n",
    "a[a>.8] = np.nan\n",
    "median, IQR = get_robustscale_params(a, by_var=True, percentiles=(25, 75))\n",
    "a_scaled = (a - median) / IQR\n",
    "test_eq(a.shape, a_scaled.shape)\n",
    "test_eq(np.isnan(median).sum(),0)\n",
    "test_eq(np.isnan(IQR).sum(),0)\n",
    "test_eq(np.isnan(a), np.isnan(a_scaled))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def torch_slice_by_dim(t, index, dim=-1, **kwargs):\n",
    "    if not isinstance(index, torch.Tensor): index = torch.Tensor(index)\n",
    "    assert t.ndim == index.ndim, \"t and index must have the same ndim\"\n",
    "    index = index.long()\n",
    "    return torch.gather(t, dim, index, **kwargs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[0.5341],\n",
       "        [0.4543],\n",
       "        [0.0942],\n",
       "        [0.9645],\n",
       "        [0.0405]])"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "t = torch.rand(5, 3)\n",
    "index = torch.randint(0, 3, (5, 1))\n",
    "# index = [[0, 2], [0, 1], [1, 2], [0, 2], [0, 1]]\n",
    "torch_slice_by_dim(t, index)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def torch_nanmean(o, dim=None, keepdim=False):\n",
    "    \"\"\"There's currently no torch.nanmean function\"\"\"\n",
    "    mask = torch.isnan(o)\n",
    "    if mask.any():\n",
    "        output = torch.from_numpy(np.asarray(np.nanmean(o.cpu().numpy(), axis=dim, keepdims=keepdim))).to(o.device)\n",
    "        if output.shape == mask.shape:\n",
    "            output[mask] = 0\n",
    "        return output\n",
    "    else:\n",
    "        return torch.mean(o, dim=dim, keepdim=keepdim) if dim is not None else torch.mean(o)\n",
    "\n",
    "\n",
    "def torch_nanstd(o, dim=None, keepdim=False):\n",
    "    \"\"\"There's currently no torch.nanstd function\"\"\"\n",
    "    mask = torch.isnan(o)\n",
    "    if mask.any():\n",
    "        output = torch.from_numpy(np.asarray(np.nanstd(o.cpu().numpy(), axis=dim, keepdims=keepdim))).to(o.device)\n",
    "        if output.shape == mask.shape:\n",
    "            output[mask] = 1\n",
    "        return output\n",
    "    else:\n",
    "        return torch.std(o, dim=dim, keepdim=keepdim) if dim is not None else torch.std(o)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "t = torch.rand(1000)\n",
    "t[:100] = float('nan')\n",
    "assert torch_nanmean(t).item() > 0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def concat(*ls, dim=0):\n",
    "    \"Concatenate tensors, arrays, lists, or tuples by a dimension\"\n",
    "    if not len(ls): return []\n",
    "    it = ls[0]\n",
    "    if isinstance(it, torch.Tensor): return torch.cat(ls, dim=dim)\n",
    "    elif isinstance(it, np.ndarray): return np.concatenate(ls, axis=dim)\n",
    "    else:\n",
    "        res = np.concatenate(ls, axis=dim).tolist()\n",
    "        return retain_type(res, typ=type(it))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def reduce_memory_usage(df):\n",
    "\n",
    "    start_memory = df.memory_usage().sum() / 1024**2\n",
    "    print(f\"Memory usage of dataframe is {start_memory} MB\")\n",
    "\n",
    "    for col in df.columns:\n",
    "        col_type = df[col].dtype\n",
    "\n",
    "        if col_type != 'object':\n",
    "            c_min = df[col].min()\n",
    "            c_max = df[col].max()\n",
    "\n",
    "            if str(col_type)[:3] == 'int':\n",
    "                if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:\n",
    "                    df[col] = df[col].astype(np.int8)\n",
    "                elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:\n",
    "                    df[col] = df[col].astype(np.int16)\n",
    "                elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:\n",
    "                    df[col] = df[col].astype(np.int32)\n",
    "                elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:\n",
    "                    df[col] = df[col].astype(np.int64)\n",
    "\n",
    "            else:\n",
    "                if c_min > np.finfo(np.float16).min and c_max < np.finfo(np.float16).max:\n",
    "                    df[col] = df[col].astype(np.float16)\n",
    "                elif c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max:\n",
    "                    df[col] = df[col].astype(np.float32)\n",
    "                else:\n",
    "                    pass\n",
    "        else:\n",
    "            df[col] = df[col].astype('category')\n",
    "\n",
    "    end_memory = df.memory_usage().sum() / 1024**2\n",
    "    print(f\"Memory usage of dataframe after reduction {end_memory} MB\")\n",
    "    print(f\"Reduced by {100 * (start_memory - end_memory) / start_memory} % \")\n",
    "    return df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def cls_name(o): return o.__class__.__name__"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_eq(cls_name(timer), 'Timer')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def roll2d(o, roll1: Union[None, list, int] = None, roll2: Union[None, list, int] = None):\n",
    "    \"\"\"Rolls a 2D object on the indicated axis\n",
    "    This solution is based on https://stackoverflow.com/questions/20360675/roll-rows-of-a-matrix-independently\n",
    "    \"\"\"\n",
    "\n",
    "    assert o.ndim == 2, \"roll2D can only be applied to 2d objects\"\n",
    "    axis1, axis2 = np.ogrid[:o.shape[0], :o.shape[1]]\n",
    "    if roll1 is not None:\n",
    "        if isinstance(roll1, int): axis1 = axis1 - np.array(roll1).reshape(1,1)\n",
    "        else: axis1 = np.array(roll1).reshape(o.shape[0],1)\n",
    "    if roll2 is not None:\n",
    "        if isinstance(roll2, int):  axis2 = axis2 - np.array(roll2).reshape(1,1)\n",
    "        else: axis2 = np.array(roll2).reshape(1,o.shape[1])\n",
    "    return o[axis1, axis2]\n",
    "\n",
    "\n",
    "def roll3d(o, roll1: Union[None, list, int] = None, roll2: Union[None, list, int] = None, roll3: Union[None, list, int] = None):\n",
    "    \"\"\"Rolls a 3D object on the indicated axis\n",
    "    This solution is based on https://stackoverflow.com/questions/20360675/roll-rows-of-a-matrix-independently\n",
    "    \"\"\"\n",
    "\n",
    "    assert o.ndim == 3, \"roll3D can only be applied to 3d objects\"\n",
    "    axis1, axis2, axis3 = np.ogrid[:o.shape[0], :o.shape[1], :o.shape[2]]\n",
    "    if roll1 is not None:\n",
    "        if isinstance(roll1, int): axis1 = axis1 - np.array(roll1).reshape(1,1,1)\n",
    "        else: axis1 = np.array(roll1).reshape(o.shape[0],1,1)\n",
    "    if roll2 is not None:\n",
    "        if isinstance(roll2, int):  axis2 = axis2 - np.array(roll2).reshape(1,1,1)\n",
    "        else: axis2 = np.array(roll2).reshape(1,o.shape[1],1)\n",
    "    if roll3 is not None:\n",
    "        if isinstance(roll3, int):  axis3 = axis3 - np.array(roll3).reshape(1,1,1)\n",
    "        else: axis3 = np.array(roll3).reshape(1,1,o.shape[2])\n",
    "    return o[axis1, axis2, axis3]\n",
    "\n",
    "\n",
    "def random_roll2d(o, axis=(), replace=False):\n",
    "    \"\"\"Rolls a 2D object on the indicated axis\n",
    "    This solution is based on https://stackoverflow.com/questions/20360675/roll-rows-of-a-matrix-independently\n",
    "    \"\"\"\n",
    "\n",
    "    assert o.ndim == 2, \"roll2D can only be applied to 2d objects\"\n",
    "    axis1, axis2 = np.ogrid[:o.shape[0], :o.shape[1]]\n",
    "    if 0 in axis:\n",
    "        axis1 = random_choice(np.arange(o.shape[0]), o.shape[0], replace).reshape(-1, 1)\n",
    "    if 1 in axis:\n",
    "        axis2 = random_choice(np.arange(o.shape[1]), o.shape[1], replace).reshape(1, -1)\n",
    "    return o[axis1, axis2]\n",
    "\n",
    "\n",
    "def random_roll3d(o, axis=(), replace=False):\n",
    "    \"\"\"Randomly rolls a 3D object along the indicated axes\n",
    "    This solution is based on https://stackoverflow.com/questions/20360675/roll-rows-of-a-matrix-independently\n",
    "    \"\"\"\n",
    "\n",
    "    assert o.ndim == 3, \"random_roll3d can only be applied to 3d objects\"\n",
    "    axis1, axis2, axis3 = np.ogrid[:o.shape[0], :o.shape[1], :o.shape[2]]\n",
    "    if 0 in axis:\n",
    "        axis1 = random_choice(np.arange(o.shape[0]), o.shape[0], replace).reshape(-1, 1, 1)\n",
    "    if 1 in axis:\n",
    "        axis2 = random_choice(np.arange(o.shape[1]), o.shape[1], replace).reshape(1, -1, 1)\n",
    "    if 2 in axis:\n",
    "        axis3 = random_choice(np.arange(o.shape[2]), o.shape[2], replace).reshape(1, 1, -1)\n",
    "    return o[axis1, axis2, axis3]\n",
    "\n",
    "def rotate_axis0(o, steps=1):\n",
    "    return o[np.arange(o.shape[0]) - steps]\n",
    "\n",
    "def rotate_axis1(o, steps=1):\n",
    "    return o[:, np.arange(o.shape[1]) - steps]\n",
    "\n",
    "def rotate_axis2(o, steps=1):\n",
    "    return o[:, :, np.arange(o.shape[2]) - steps]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  0,   1,   2,   3,   4,   5,   6,   7,   8,   9],\n",
       "       [  0,  10,  20,  30,  40,  50,  60,  70,  80,  90],\n",
       "       [  0, 100, 200, 300, 400, 500, 600, 700, 800, 900]])"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.tile(np.arange(10), 3).reshape(3, 10) * np.array([1, 10, 100]).reshape(-1, 1)\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  0, 100, 200, 300, 400, 500, 600, 700, 800, 900],\n",
       "       [  0,  10,  20,  30,  40,  50,  60,  70,  80,  90],\n",
       "       [  0,   1,   2,   3,   4,   5,   6,   7,   8,   9]])"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "roll2d(a, roll1=[2, 1, 0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  7,   8,   9,   0,   1,   2,   3,   4,   5,   6],\n",
       "       [ 70,  80,  90,   0,  10,  20,  30,  40,  50,  60],\n",
       "       [700, 800, 900,   0, 100, 200, 300, 400, 500, 600]])"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "roll2d(a, roll2=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "o = torch.arange(24).reshape(2,3,4)\n",
    "test_eq(rotate_axis0(o)[1], o[0])\n",
    "test_eq(rotate_axis1(o)[:,1], o[:,0])\n",
    "test_eq(rotate_axis2(o)[...,1], o[...,0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def chunks_calculator(shape, dtype='float32', n_bytes=1024**3):\n",
    "    \"\"\"Function to calculate chunks for a given size of n_bytes (default = 1024**3 == 1GB).\n",
    "    It guarantees > 50% of the chunk will be filled\"\"\"\n",
    "\n",
    "    X  = np.random.rand(1, *shape[1:]).astype(dtype)\n",
    "    byts = get_size(X, return_str=False)\n",
    "    n = n_bytes // byts\n",
    "    if shape[0] / n <= 1: return False\n",
    "    remainder = shape[0] % n\n",
    "    if remainder / n < .5:\n",
    "        n_chunks = shape[0] // n\n",
    "        n += np.ceil(remainder / n_chunks).astype(int)\n",
    "    return (n, -1, -1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "shape = (1_000, 10, 1000)\n",
    "dtype = 'float32'\n",
    "test_eq(chunks_calculator(shape, dtype), False)\n",
    "\n",
    "shape = (54684, 10, 1000)\n",
    "dtype = 'float32'\n",
    "test_eq(chunks_calculator(shape, dtype), (27342, -1, -1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def is_memory_shared(a, b):\n",
    "    \"Check if 2 array-like objects share memory\"\n",
    "    assert is_array(a) and is_array(b)\n",
    "    return np.shares_memory(a, b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = np.random.rand(2,3,4)\n",
    "t1 = torch.from_numpy(a)\n",
    "test_eq(is_memory_shared(a, t1), True)\n",
    "a = np.random.rand(2,3,4)\n",
    "t2 = torch.as_tensor(a)\n",
    "test_eq(is_memory_shared(a, t2), True)\n",
    "a = np.random.rand(2,3,4)\n",
    "t3 = torch.tensor(a)\n",
    "test_eq(is_memory_shared(a, t3), False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def assign_in_chunks(a, b, chunksize='auto', inplace=True, verbose=True):\n",
    "    \"\"\"Assigns values in b to an array-like object a using chunks to avoid memory overload.\n",
    "    The resulting a retains it's dtype and share it's memory.\n",
    "    a: array-like object\n",
    "    b: may be an integer, float, str, 'rand' (for random data), or another array like object.\n",
    "    chunksize: is the size of chunks. If 'auto' chunks will have around 1GB each.\n",
    "    \"\"\"\n",
    "    if not (isinstance(b, str) and b == 'rand') and not isinstance(b, (Iterable, Generator)):\n",
    "        a[:] = b\n",
    "    else:\n",
    "        shape = a.shape\n",
    "        dtype = a.dtype\n",
    "        if chunksize == \"auto\":\n",
    "            chunksize = chunks_calculator(shape, dtype)\n",
    "            chunksize = shape[0] if not chunksize else  chunksize[0]\n",
    "            if verbose:\n",
    "                print(f'auto chunksize: {chunksize}')\n",
    "        for i in progress_bar(range((shape[0] - 1) // chunksize + 1), display=verbose, leave=False):\n",
    "            start, end = i * chunksize, min(shape[0], (i + 1) * chunksize)\n",
    "            if start >= shape[0]: break\n",
    "            if (isinstance(b, str) and b == 'rand'):\n",
    "                a[start:end] = np.random.rand(end - start, *shape[1:])\n",
    "            else:\n",
    "                if is_dask(b):\n",
    "                    a[start:end] = b[start:end].compute()\n",
    "                else:\n",
    "                    a[start:end] = b[start:end]\n",
    "    if not inplace: return a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "<style>\n",
       "    /* Turns off some styling */\n",
       "    progress {\n",
       "        /* gets rid of default border in Firefox and Opera. */\n",
       "        border: none;\n",
       "        /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
       "        background-size: auto;\n",
       "    }\n",
       "    progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
       "        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
       "    }\n",
       "    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
       "        background: #F44336;\n",
       "    }\n",
       "</style>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "\n",
       "<style>\n",
       "    /* Turns off some styling */\n",
       "    progress {\n",
       "        /* gets rid of default border in Firefox and Opera. */\n",
       "        border: none;\n",
       "        /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
       "        background-size: auto;\n",
       "    }\n",
       "    progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
       "        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
       "    }\n",
       "    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
       "        background: #F44336;\n",
       "    }\n",
       "</style>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "a = np.random.rand(10,3,4).astype('float32')\n",
    "a_dtype = a.dtype\n",
    "a_id = id(a)\n",
    "b = np.random.rand(10,3,4).astype('float64')\n",
    "assign_in_chunks(a, b, chunksize=2, inplace=True, verbose=True)\n",
    "test_close(a, b)\n",
    "test_eq(a.dtype, a_dtype)\n",
    "test_eq(id(a), a_id)\n",
    "\n",
    "a = np.random.rand(10,3,4).astype('float32')\n",
    "a_dtype = a.dtype\n",
    "a_id = id(a)\n",
    "b = 1\n",
    "assign_in_chunks(a, b, chunksize=2, inplace=True, verbose=True)\n",
    "test_eq(a, np.ones_like(a).astype(a.dtype))\n",
    "test_eq(a.dtype, a_dtype)\n",
    "test_eq(id(a), a_id)\n",
    "\n",
    "a = np.random.rand(10,3,4).astype('float32')\n",
    "a_dtype = a.dtype\n",
    "a_id = id(a)\n",
    "b = 0.5\n",
    "assign_in_chunks(a, b, chunksize=2, inplace=True, verbose=True)\n",
    "test_eq(a.dtype, a_dtype)\n",
    "test_eq(id(a), a_id)\n",
    "\n",
    "a = np.random.rand(10,3,4).astype('float32')\n",
    "a_dtype = a.dtype\n",
    "a_id = id(a)\n",
    "b = 'rand'\n",
    "assign_in_chunks(a, b, chunksize=2, inplace=True, verbose=True)\n",
    "test_eq(a.dtype, a_dtype)\n",
    "test_eq(id(a), a_id)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "<style>\n",
       "    /* Turns off some styling */\n",
       "    progress {\n",
       "        /* gets rid of default border in Firefox and Opera. */\n",
       "        border: none;\n",
       "        /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
       "        background-size: auto;\n",
       "    }\n",
       "    progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
       "        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
       "    }\n",
       "    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
       "        background: #F44336;\n",
       "    }\n",
       "</style>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "\n",
       "<style>\n",
       "    /* Turns off some styling */\n",
       "    progress {\n",
       "        /* gets rid of default border in Firefox and Opera. */\n",
       "        border: none;\n",
       "        /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
       "        background-size: auto;\n",
       "    }\n",
       "    progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
       "        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
       "    }\n",
       "    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
       "        background: #F44336;\n",
       "    }\n",
       "</style>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "a = np.random.rand(10,3,4).astype('float32')\n",
    "b = np.random.rand(10,3,4).astype('float64')\n",
    "c = assign_in_chunks(a, b, chunksize=2, inplace=False, verbose=True)\n",
    "test_close(c, b)\n",
    "test_eq(a.dtype, c.dtype)\n",
    "test_eq(is_memory_shared(a, c), True)\n",
    "\n",
    "a = np.random.rand(10,3,4).astype('float32')\n",
    "b = 1\n",
    "c = assign_in_chunks(a, b, chunksize=2, inplace=False, verbose=True)\n",
    "test_eq(a, np.ones_like(a).astype(a.dtype))\n",
    "test_eq(a.dtype, c.dtype)\n",
    "test_eq(is_memory_shared(a, c), True)\n",
    "\n",
    "a = np.random.rand(10,3,4).astype('float32')\n",
    "b = 0.5\n",
    "c = assign_in_chunks(a, b, chunksize=2, inplace=False, verbose=True)\n",
    "test_eq(a.dtype, c.dtype)\n",
    "test_eq(is_memory_shared(a, c), True)\n",
    "\n",
    "a = np.random.rand(10,3,4).astype('float32')\n",
    "b = 'rand'\n",
    "c = assign_in_chunks(a, b, chunksize=2, inplace=False, verbose=True)\n",
    "test_eq(a.dtype, c.dtype)\n",
    "test_eq(is_memory_shared(a, c), True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def create_array(shape, fname=None, path='./data', on_disk=True, dtype='float32', mode='r+', fill_value='rand', chunksize='auto', verbose=True, **kwargs):\n",
    "    \"\"\"\n",
    "    mode:\n",
    "        ‘r’:  Open existing file for reading only.\n",
    "        ‘r+’: Open existing file for reading and writing.\n",
    "        ‘w+’: Create or overwrite existing file for reading and writing.\n",
    "        ‘c’:  Copy-on-write: assignments affect data in memory, but changes are not saved to disk. The file on disk is read-only.\n",
    "    fill_value: 'rand' (for random numbers), int or float\n",
    "    chunksize = 'auto' to calculate chunks of 1GB, or any integer (for a given number of samples)\n",
    "    \"\"\"\n",
    "    if on_disk:\n",
    "        assert fname is not None, 'you must provide a fname (filename)'\n",
    "        path = Path(path)\n",
    "        if not fname.endswith('npy'): fname = f'{fname}.npy'\n",
    "        filename = path/fname\n",
    "        filename.parent.mkdir(parents=True, exist_ok=True)\n",
    "        # Save a small empty array\n",
    "        _temp_fn = path/'temp_X.npy'\n",
    "        np.save(_temp_fn, np.empty(0))\n",
    "        # Create  & save file\n",
    "        arr = np.memmap(_temp_fn, dtype=dtype, mode='w+', shape=shape, **kwargs)\n",
    "        np.save(filename, arr)\n",
    "        del arr\n",
    "        os.remove(_temp_fn)\n",
    "        # Open file in selected mode\n",
    "        arr = np.load(filename, mmap_mode=mode)\n",
    "    else:\n",
    "        arr = np.empty(shape, dtype=dtype, **kwargs)\n",
    "    if fill_value != 0:\n",
    "        assign_in_chunks(arr, fill_value, chunksize=chunksize, inplace=True, verbose=verbose)\n",
    "    return arr\n",
    "\n",
    "create_empty_array = partial(create_array, fill_value=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "auto chunksize: 100\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "\n",
       "<style>\n",
       "    /* Turns off some styling */\n",
       "    progress {\n",
       "        /* gets rid of default border in Firefox and Opera. */\n",
       "        border: none;\n",
       "        /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
       "        background-size: auto;\n",
       "    }\n",
       "    progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
       "        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
       "    }\n",
       "    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
       "        background: #F44336;\n",
       "    }\n",
       "</style>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fname = 'X_on_disk'\n",
    "shape = (100, 10, 10)\n",
    "X = create_array(shape, fname, on_disk=True, mode='r+')\n",
    "test_ne(abs(X).sum(), 0)\n",
    "os.remove(X.filename)\n",
    "del X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "<style>\n",
       "    /* Turns off some styling */\n",
       "    progress {\n",
       "        /* gets rid of default border in Firefox and Opera. */\n",
       "        border: none;\n",
       "        /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
       "        background-size: auto;\n",
       "    }\n",
       "    progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
       "        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
       "    }\n",
       "    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
       "        background: #F44336;\n",
       "    }\n",
       "</style>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fname = 'X_on_disk'\n",
    "shape = (100, 10, 10)\n",
    "X = create_empty_array(shape, fname, on_disk=True, mode='r+')\n",
    "test_eq(abs(X).sum(), 0)\n",
    "\n",
    "chunksize = 10\n",
    "pbar = progress_bar(range(math.ceil(len(X) / chunksize)), leave=False)\n",
    "start = 0\n",
    "for i in pbar:\n",
    "    end = min(start + chunksize, len(X))\n",
    "    partial_data = np.random.rand(end - start, X.shape[1] , X.shape[2])\n",
    "    X[start:end] = partial_data\n",
    "    start = end\n",
    "    del partial_data\n",
    "    gc.collect()\n",
    "filename = X.filename\n",
    "del X\n",
    "X = np.load(filename, mmap_mode='r+')\n",
    "test_eq((X == 0).sum(), 0)\n",
    "test_eq(X.shape, shape)\n",
    "os.remove(X.filename)\n",
    "del X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "import gzip\n",
    "\n",
    "def np_save_compressed(arr, fname=None, path='./data', verbose=False, **kwargs):\n",
    "    assert fname is not None, 'you must provide a fname (filename)'\n",
    "    if fname.endswith('npy'): fname = f'{fname}.gz'\n",
    "    elif not fname.endswith('npy.gz'): fname = f'{fname}.npy.gz'\n",
    "    filename = Path(path)/fname\n",
    "    filename.parent.mkdir(parents=True, exist_ok=True)\n",
    "    f = gzip.GzipFile(filename, 'w', **kwargs)\n",
    "    np.save(file=f, arr=arr)\n",
    "    f.close()\n",
    "    pv(f'array saved to {filename}', verbose)\n",
    "\n",
    "def np_load_compressed(fname=None, path='./data', **kwargs):\n",
    "    assert fname is not None, 'you must provide a fname (filename)'\n",
    "    if fname.endswith('npy'): fname = f'{fname}.gz'\n",
    "    elif not fname.endswith('npy.gz'): fname = f'{fname}.npy.gz'\n",
    "    filename = Path(path)/fname\n",
    "    f = gzip.GzipFile(filename, 'r', **kwargs)\n",
    "    arr = np.load(f)\n",
    "    f.close()\n",
    "    return arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "X1 = np.random.rand(10)\n",
    "np_save_compressed(X1, 'X_comp', path='./data')\n",
    "X2 = np_load_compressed('X_comp')\n",
    "test_eq(X1, X2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def np2memmap(arr, fname=None, path='./data', dtype='float32', mode='c', **kwargs):\n",
    "    \"\"\" Function that turns an ndarray into a memmap ndarray\n",
    "    mode:\n",
    "        ‘r’:  Open existing file for reading only.\n",
    "        ‘r+’: Open existing file for reading and writing.\n",
    "        ‘w+’: Create or overwrite existing file for reading and writing.\n",
    "        ‘c’:  Copy-on-write: assignments affect data in memory, but changes are not saved to disk. The file on disk is read-only.\n",
    "    \"\"\"\n",
    "    assert fname is not None, 'you must provide a fname (filename)'\n",
    "    if not fname.endswith('npy'): fname = f'{fname}.npy'\n",
    "    filename = Path(path)/fname\n",
    "    filename.parent.mkdir(parents=True, exist_ok=True)\n",
    "    # Save file\n",
    "    np.save(filename, arr)\n",
    "    # Open file in selected mode\n",
    "    arr = np.load(filename, mmap_mode=mode)\n",
    "    return arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "X1 = np.random.rand(10)\n",
    "X2 = np2memmap(X1, 'X1_test')\n",
    "test_eq(X1, X2)\n",
    "test_ne(type(X1), type(X2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def torch_mean_groupby(o, idxs):\n",
    "    \"\"\"Computes torch mean along axis 0 grouped by the idxs.\n",
    "    Need to ensure that idxs have the same order as o\"\"\"\n",
    "    if is_listy(idxs[0]): idxs = flatten_list(idxs)\n",
    "    flattened_idxs = torch.tensor(idxs)\n",
    "    idxs, vals = torch.unique(flattened_idxs, return_counts=True)\n",
    "    vs = torch.split_with_sizes(o, tuple(vals))\n",
    "    return torch.cat([v.mean(0).unsqueeze(0) for k,v in zip(idxs, vs)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "o = torch.arange(6*2*3).reshape(6, 2, 3).float()\n",
    "idxs = np.array([[0,1,2,3], [2,3]], dtype=object)\n",
    "output = torch_mean_groupby(o, idxs)\n",
    "test_eq(o[:2], output[:2])\n",
    "test_eq(o[2:4].mean(0), output[2])\n",
    "test_eq(o[4:6].mean(0), output[3])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def torch_flip(t, dims=-1):\n",
    "    if dims == -1: return t[..., np.arange(t.shape[dims])[::-1].copy()]\n",
    "    elif dims == 0: return t[np.arange(t.shape[dims])[::-1].copy()]\n",
    "    elif dims == 1: return t[:, np.arange(t.shape[dims])[::-1].copy()]\n",
    "    elif dims == 2: return t[:, :, np.arange(t.shape[dims])[::-1].copy()]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "t = torch.randn(2, 3, 4)\n",
    "test_eq(torch.flip(t, (2,)), torch_flip(t, dims=-1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def torch_nan_to_num(o, num=0, inplace=False):\n",
    "    if ismin_torch(\"1.8\") and not inplace:\n",
    "        return torch.nan_to_num(o, num)\n",
    "    mask = torch.isnan(o)\n",
    "    return torch_masked_to_num(o, mask, num=num, inplace=inplace)\n",
    "\n",
    "def torch_masked_to_num(o, mask, num=0, inplace=False):\n",
    "    if inplace:\n",
    "        o[:] = o.masked_fill(mask, num)\n",
    "    else:\n",
    "        return o.masked_fill(mask, num)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = torch.rand(2, 4, 6)\n",
    "x[:, :3][x[:, :3] < .5] = np.nan\n",
    "nan_values = torch.isnan(x).sum()\n",
    "y = torch_nan_to_num(x[:, :3], inplace=False)\n",
    "test_eq(torch.isnan(y).sum(), 0)\n",
    "test_eq(torch.isnan(x).sum(), nan_values)\n",
    "torch_nan_to_num(x[:, :3], inplace=True)\n",
    "test_eq(torch.isnan(x).sum(), 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = torch.rand(2, 4, 6)\n",
    "mask = x[:, :3] > .5\n",
    "x[:, :3] = torch_masked_to_num(x[:, :3], mask, num=0, inplace=False)\n",
    "test_eq(x[:, :3][mask].sum(), 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = torch.rand(2, 4, 6)\n",
    "mask = x[:, :3] > .5\n",
    "torch_masked_to_num(x[:, :3], mask, num=0, inplace=True)\n",
    "test_eq(x[:, :3][mask].sum(), 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def mpl_trend(x, y, deg=1):\n",
    "    return np.poly1d(np.polyfit(x, y, deg))(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.sort(np.random.randint(0, 100, 100)/10)\n",
    "y = np.random.rand(100) + np.linspace(0, 10, 100)\n",
    "trend = mpl_trend(x, y)\n",
    "plt.scatter(x, y)\n",
    "plt.plot(x, trend, 'r')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def int2digits(o, n_digits=None, normalize=True):\n",
    "    if n_digits is not None:\n",
    "        iterable = '0' * (n_digits - len(str(abs(o)))) + str(abs(o))\n",
    "    else:\n",
    "        iterable = str(abs(o))\n",
    "    sign = np.sign(o)\n",
    "    digits = np.array([sign * int(d) for d in iterable])\n",
    "    if normalize:\n",
    "        digits = digits / 10\n",
    "    return digits\n",
    "\n",
    "\n",
    "def array2digits(o, n_digits=None, normalize=True):\n",
    "    output = np.array(list(map(partial(int2digits, n_digits=n_digits), o)))\n",
    "    if normalize:\n",
    "        output = output / 10\n",
    "    return output"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "o = -9645\n",
    "test_eq(int2digits(o, 6), np.array([ 0,  0, -.9, -.6, -.4, -.5]))\n",
    "\n",
    "a = np.random.randint(-1000, 1000, 10)\n",
    "test_eq(array2digits(a,5).shape, (10,5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def sincos_encoding(seq_len, device=None, to_np=False):\n",
    "    if to_np:\n",
    "        sin = np.sin(np.arange(seq_len) / seq_len * 2 * np.pi)\n",
    "        cos = np.cos(np.arange(seq_len) / seq_len * 2 * np.pi)\n",
    "    else:\n",
    "        if device is None: device = default_device()\n",
    "        sin = torch.sin(torch.arange(seq_len, device=device) / seq_len * 2 * np.pi)\n",
    "        cos = torch.cos(torch.arange(seq_len, device=device) / seq_len * 2 * np.pi)\n",
    "    return sin, cos"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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0dFReeONN5SjR48qixcvVtzd3ZUvv/yy+pg333xT8fX1VX788Udlz549yh133CFTl80wevRopVmzZtXTxH/44QeladOmynPPPVd9jLzW5snPz1d27typ7Ny5UwGU9957T9m5c6dy+vRpRVFq97oOHjxY6dq1q5KYmKhs2rRJad26tUwTt0YfffSREhERoTg7Oys9e/ZUtm7dqnUkmwdc8vL5559XH1NcXKw8/vjjip+fn+Lu7q7ceeedypkzZ7QLbUf+t8CR17r+/Pzzz0qHDh0UFxcXJTo6Wvnss89q3G4ymZSXX35ZCQoKUlxcXJQBAwYohw8f1iit7TIYDMpTTz2lREREKK6urkpUVJTy4osvKqWlpdXHyGttnrVr117y9/Po0aMVRand63r+/Hnl/vvvVzw9PRVvb29l7NixSn5+fr3k0ynKX5ZzFEIIIYSwAzIGRwghhBB2RwocIYQQQtgdKXCEEEIIYXekwBFCCCGE3ZECRwghhBB2RwocIYQQQtgdKXCEEEIIYXekwBFCCCGE3ZECRwghhBB2RwocIYQQQtgdKXCEEEIIYXekwBFCCCGE3fl/tq98um2JREEAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sin, cos = sincos_encoding(100)\n",
    "plt.plot(sin.cpu().numpy())\n",
    "plt.plot(cos.cpu().numpy())\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def linear_encoding(seq_len, device=None, to_np=False, lin_range=(-1,1)):\n",
    "    if to_np:\n",
    "        enc =  np.linspace(lin_range[0], lin_range[1], seq_len)\n",
    "    else:\n",
    "        if device is None: device = default_device()\n",
    "        enc = torch.linspace(lin_range[0], lin_range[1], seq_len, device=device)\n",
    "    return enc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjgAAAGdCAYAAAAfTAk2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABNkklEQVR4nO3dd3hUZcL+8e9MyoQASQghDQKE3pNAJIK6FvIaBAsrKm1XZBVelWpQBBVcRI19kbLLFsv6SgBRQUVFEURFIy0JvYP0JEBMJoW0mfP7w5+zG+mQyUkm9+e65lrmzHPO3OcImXvPM+fEYhiGgYiIiIgHsZodQERERKSqqeCIiIiIx1HBEREREY+jgiMiIiIeRwVHREREPI4KjoiIiHgcFRwRERHxOCo4IiIi4nG8zQ5gBqfTybFjx2jYsCEWi8XsOCIiInIRDMOgoKCAyMhIrNbzn6OpkwXn2LFjREVFmR1DRERELsPhw4dp1qzZecfUyYLTsGFD4JcDFBAQYHIaERERuRh2u52oqCjX5/j51MmC8+u0VEBAgAqOiIhILXMxXy/Rl4xFRETE46jgiIiIiMdRwRERERGPo4IjIiIiHkcFR0RERDyOCo6IiIh4HBUcERER8TgqOCIiIuJxVHBERETE47i14Hz77bfcdtttREZGYrFYWLp06QXXWb16Nd27d8dms9GmTRvefvvtM8bMnTuXli1b4ufnR0JCAuvWrav68CIiIlJrubXgFBUVERMTw9y5cy9q/IEDB+jfvz833ngjmZmZTJgwgQceeIAvvvjCNWbRokUkJyfz9NNPk56eTkxMDElJSeTk5LhrN0RERKSWsRiGYVTLG1ksLFmyhAEDBpxzzOOPP86nn37K1q1bXcsGDx5MXl4ey5cvByAhIYGrrrqKOXPmAOB0OomKimLs2LFMnjz5orLY7XYCAwPJz8/X76ISERGpJS7l87tGfQcnLS2NxMTESsuSkpJIS0sDoKysjI0bN1YaY7VaSUxMdI05m9LSUux2e6WHiIiIVL2jeaf5w7/Wsju7wNQcNargZGVlERYWVmlZWFgYdrud06dPc/LkSRwOx1nHZGVlnXO7KSkpBAYGuh5RUVFuyS8iIlKXfbU9m/6zvmPN3pM88eEWqmmS6KxqVMFxlylTppCfn+96HD582OxIIiIiHqOswsmzy7bzwDsbyCsup1uzQF67JxaLxWJaJm/T3vkswsPDyc7OrrQsOzubgIAA6tWrh5eXF15eXmcdEx4efs7t2mw2bDabWzKLiIjUZYdzixmzIINNh/MA+NM10Uy+pQO+3uaeQ6lRZ3B69erFypUrKy1bsWIFvXr1AsDX15cePXpUGuN0Olm5cqVrjIiIiFSP5VuP02/Wd2w6nEeAnzf/+GMPpt3WyfRyA24+g1NYWMjevXtdzw8cOEBmZibBwcE0b96cKVOmcPToUd555x0AHnzwQebMmcOkSZP405/+xKpVq3jvvff49NNPXdtITk5m+PDhxMfH07NnT2bOnElRUREjRoxw566IiIjI/1da4eD5T3fw77SDAMQ1D2L2kDiaNfI3Odl/uLXgbNiwgRtvvNH1PDk5GYDhw4fz9ttvc/z4cQ4dOuR6PTo6mk8//ZRHHnmE119/nWbNmvGvf/2LpKQk15hBgwZx4sQJpk2bRlZWFrGxsSxfvvyMLx6LiIhI1fvpZBFjFqSz9egvVyT/7+9a8WhSe3y8zD9r89+q7T44NYnugyMiInLplm0+xuQPtlBYWkEjfx9evSeGmzpU3wmGS/n8rlFfMhYREZGap6TcwYxl25m/9pdZl6taNmLWkDgiAuuZnOzcVHBERETknPadKGT0/HR2Zv1y476Hb2hN8v+0w7uGTUn9lgqOiIiInNXSjKM8sWQLxWUOGtf35bVBsVzfronZsS6KCo6IiIhUcrrMwZ8/3saiDb/cGPfqVsG8PjiOsAA/k5NdPBUcERERcdmTXcDo1HR2ZxdiscDYm9oyvk9bvKzm3ZX4cqjgiIiICACLNxxm2kfbOF3uIKSBjdcHx3JNmxCzY10WFRwREZE6rqi0gqkfbeXD9KMAXNsmhL8MiqVJw9r7a45UcEREROqwnVl2Rs9PZ9+JIqwWeCSxHQ/f2KbWTUn9lgqOiIhIHWQYBovWH+bpj7dRWuEkLMDG64PjuLpVY7OjVQkVHBERkTqmsLSCJ5ds4aPMYwBc364Jr90TQ+MGtXdK6rdUcEREROqQbcfyGZOawYGTRXhZLTyW1J5R17XCWsunpH5LBUdERKQOMAyDd9ceYsay7ZRVOIkM9GP20Dh6tAg2O5pbqOCIiIh4OHtJOVM+2MKnW44DkNgxlJfviqFRfV+Tk7mPCo6IiIgH23wkjzGpGRzKLcbbamHyLR24/9poLBbPmpL6LRUcERERD2QYBm99/xMpn++g3GHQrFE95gztTmxUkNnRqoUKjoiIiIfJLy7nsfc38eX2bACSOofx0l0xBNbzMTlZ9VHBERER8SDph35mbGoGR/NO4+tl5cn+Hbm3VwuPn5L6LRUcERERD+B0GvxrzX5eWr6LCqdBi8b+zBnSna7NAs2OZgoVHBERkVout6iMRxdvYtXOHAD6d4sg5c6uBPjVnSmp31LBERERqcXW/5TLuAUZHM8vwdfbyrRbOzEsoXmdm5L6LRUcERGRWsjpNPjbN/t4bcVuHE6DViH1mTO0O50iA8yOViOo4IiIiNQyJwtLeWRRJt/tOQnAHbGRPPf7rjSw6WP9VzoSIiIitUjavlOMX5hBTkEpfj5Wpt/emXvio+r8lNRvqeCIiIjUAg6nwdyv9zLzq904DWgT2oC5Q7vTPryh2dFqJBUcERGRGi6noIQJCzP5Yd8pAAZ2b8aMAZ3x99XH+LnoyIiIiNRga/acZMKiTE4WllLPx4tnB3RhYI9mZseq8VRwREREaqAKh5NZK/cw++u9GAa0D2vI3GFxtAnVlNTFUMERERGpYbLySxi3MIN1B3IBGNIziqdv64yfj5fJyWoPFRwREZEaZPWuHJLf20RuURn1fb14/s6u3BHb1OxYtY4KjoiISA1Q4XDy6ord/G31PgA6RQQwZ2gcrZo0MDlZ7aSCIyIiYrJjeacZuyCDjQd/BuCPV7fgyf4dNSV1BazV8SZz586lZcuW+Pn5kZCQwLp168459oYbbsBisZzx6N+/v2vMfffdd8brffv2rY5dERERqVIrd2TTb9Z3bDz4Mw1t3vx1WHdmDOiicnOF3H4GZ9GiRSQnJzNv3jwSEhKYOXMmSUlJ7Nq1i9DQ0DPGf/jhh5SVlbmenzp1ipiYGO6+++5K4/r27ctbb73lem6z2dy3EyIiIlWsrMLJS8t38q81BwDo1iyQOUO607yxv8nJPIPbC85rr73GyJEjGTFiBADz5s3j008/5c0332Ty5MlnjA8ODq70fOHChfj7+59RcGw2G+Hh4e4LLiIi4iaHc4sZuyCDzMN5APzpmmgev6U9Nm+dtakqbp2iKisrY+PGjSQmJv7nDa1WEhMTSUtLu6htvPHGGwwePJj69etXWr569WpCQ0Np3749Dz30EKdOnTrnNkpLS7Hb7ZUeIiIiZvhiWxb9Z31H5uE8Avy8+ccfezDttk4qN1XMrWdwTp48icPhICwsrNLysLAwdu7cecH1161bx9atW3njjTcqLe/bty933nkn0dHR7Nu3jyeeeIJbbrmFtLQ0vLzO/AuSkpLC9OnTr2xnRERErkBphYOUz3by9g8/ARDXPIjZQ+Jo1khTUu5Qo6+ieuONN+jatSs9e/astHzw4MGuP3ft2pVu3brRunVrVq9eTZ8+fc7YzpQpU0hOTnY9t9vtREVFuS+4iIjIfzl0qpjRqelsOZoPwKjfteKxpPb4eFXLtT51klsLTkhICF5eXmRnZ1danp2dfcHvzxQVFbFw4UKeeeaZC75Pq1atCAkJYe/evWctODabTV9CFhERU3y6+TiTP9hMQWkFjfx9ePWeGG7qEHbhFeWKuLU6+vr60qNHD1auXOla5nQ6WblyJb169TrvuosXL6a0tJQ//OEPF3yfI0eOcOrUKSIiIq44s4iISFUoKXfw1NItjE5Np6C0gvgWjfh03HUqN9XE7VNUycnJDB8+nPj4eHr27MnMmTMpKipyXVV177330rRpU1JSUiqt98YbbzBgwAAaN25caXlhYSHTp09n4MCBhIeHs2/fPiZNmkSbNm1ISkpy9+6IiIhc0P4ThYxOzWDH8V8uann4htYk/087vDUlVW3cXnAGDRrEiRMnmDZtGllZWcTGxrJ8+XLXF48PHTqE1Vr5P/iuXbtYs2YNX3755Rnb8/LyYvPmzfz73/8mLy+PyMhIbr75ZmbMmKFpKBERMd1HmUd54sMtFJU5aFzfl9cGxXJ9uyZmx6pzLIZhGGaHqG52u53AwEDy8/MJCAgwO46IiHiA02UO/vzxNhZtOAxAQnQws4bEERbgZ3Iyz3Epn981+ioqERGR2mBvTgGj52ewK7sAiwXG3tSW8X3a4mW1mB2tzlLBERERuQLvbzzC1KVbOV3uIKSBjdcHx3JNmxCzY9V5KjgiIiKXobisgqeWbuXD9KMAXNOmMX8ZFEtoQ01J1QQqOCIiIpdoZ5ad0fPT2XeiCKsFJiS2Y/SNbTQlVYOo4IiIiFwkwzBYtP4wT3+8jdIKJ2EBNl4fHMfVrRpfeGWpVio4IiIiF6GwtIInl2zho8xjAPyuXRP+ck8MjRvoFiU1kQqOiIjIBWw7ls+Y1AwOnCzCy2ph4s3tePB3rbFqSqrGUsERERE5B8MweHftIWYs205ZhZOIQD9mD4kjvmWw2dHkAlRwREREzsJeUs6UD7bw6ZbjAPTpEMord8fQqL6vycnkYqjgiIiI/MbmI3mMSc3gUG4x3lYLj/ftwAPXRWOxaEqqtlDBERER+f8Mw+DtH37i+c92UO4waBpUj9lD4+jevJHZ0eQSqeCIiIgA+cXlTPpgE19sywbg5k5hvHxXDIH+PiYnk8uhgiMiInVexqGfGZOawdG80/h6WXmiXweG926pKalaTAVHRETqLMMw+Nd3B3hx+U4qnAbNg/2ZO7Q7XZsFmh1NrpAKjoiI1Ek/F5Xx6OJNrNyZA0D/bhGk3NmVAD9NSXkCFRwREalzNvyUy7gFGRzLL8HX28q0WzsxLKG5pqQ8iAqOiIjUGU6nwbxv9/Hql7txOA2iQ+ozZ2gcnSM1JeVpVHBERKROOFlYSvJ7m/h29wkA7oiN5Lnfd6WBTR+Fnkj/VUVExOP9uP8U4xZkkFNQis3byjN3dOae+ChNSXkwFRwREfFYDqfBnFV7eX3lbpwGtAltwNyh3Wkf3tDsaOJmKjgiIuKRcgpKeGRRJt/vPQXAwO7NmDGgM/6++uirC/RfWUREPM73e08yfmEmJwtLqefjxYwBXbirRzOzY0k1UsERERGPUeFwMmvlHmZ/vRfDgPZhDZk7LI42oZqSqmtUcERExCNk20sYuyCDdQdyARh8VRRP39aZer5eJicTM6jgiIhIrffN7hM8siiT3KIy6vt68fydXbkjtqnZscREKjgiIlJrVTicvLpiN39bvQ+AjhEBzB0aR6smDUxOJmZTwRERkVrpWN5pxi3IYMPBnwH4w9XNeap/J/x8NCUlKjgiIlILrdqZTfJ7m8grLqehzZuUgV25tVuk2bGkBlHBERGRWqPc4eSl5Tv553cHAOjaNJA5Q+No0bi+ycmkplHBERGRWuFwbjFjF2SQeTgPgPt6t2RKvw7YvDUlJWdSwRERkRrvi21ZPLZ4E/aSCgL8vHnprhj6dgk3O5bUYNbqeJO5c+fSsmVL/Pz8SEhIYN26decc+/bbb2OxWCo9/Pz8Ko0xDINp06YRERFBvXr1SExMZM+ePe7eDRERqWalFQ6mf7KN//2/jdhLKoiJCuLTcdep3MgFub3gLFq0iOTkZJ5++mnS09OJiYkhKSmJnJycc64TEBDA8ePHXY+DBw9Wev2ll15i1qxZzJs3j7Vr11K/fn2SkpIoKSlx9+6IiEg1OXSqmLvnpfHW9z8BMPK6aBb/by+igv3NDSa1gtsLzmuvvcbIkSMZMWIEnTp1Yt68efj7+/Pmm2+ecx2LxUJ4eLjrERYW5nrNMAxmzpzJU089xR133EG3bt145513OHbsGEuXLnX37oiISDX4bMtx+s/6js1H8gny9+Ff98bzZP9O+HpXy8SDeAC3/k0pKytj48aNJCYm/ucNrVYSExNJS0s753qFhYW0aNGCqKgo7rjjDrZt2+Z67cCBA2RlZVXaZmBgIAkJCefcZmlpKXa7vdJDRERqnpJyB1OXbuXh+ekUlFYQ36IRn427jsROYRdeWeS/uLXgnDx5EofDUekMDEBYWBhZWVlnXad9+/a8+eabfPTRR7z77rs4nU569+7NkSNHAFzrXco2U1JSCAwMdD2ioqKudNdERKSKHThZxJ1//YH/+/GXryU8fENrFoy6msigeiYnk9qoxl1F1atXL3r16uV63rt3bzp27Mjf//53ZsyYcVnbnDJlCsnJya7ndrtdJUdEpAb5KPMoT3y4haIyB8H1ffnLoFiub9fE7FhSi7m14ISEhODl5UV2dnal5dnZ2YSHX9w34H18fIiLi2Pv3r0ArvWys7OJiIiotM3Y2NizbsNms2Gz2S5jD0RExJ1Kyn+5SmrBusMAJEQH8/rgOMID/S6wpsj5uXWKytfXlx49erBy5UrXMqfTycqVKyudpTkfh8PBli1bXGUmOjqa8PDwStu02+2sXbv2orcpIiLm25tTyB1zvmfBusNYLDDupjbMfyBB5UaqhNunqJKTkxk+fDjx8fH07NmTmTNnUlRUxIgRIwC49957adq0KSkpKQA888wzXH311bRp04a8vDxefvllDh48yAMPPAD8coXVhAkTePbZZ2nbti3R0dFMnTqVyMhIBgwY4O7dERGRKvDBxiM8tXQrp8sdhDSwMXNQLNe2DTE7lngQtxecQYMGceLECaZNm0ZWVhaxsbEsX77c9SXhQ4cOYbX+50TSzz//zMiRI8nKyqJRo0b06NGDH374gU6dOrnGTJo0iaKiIkaNGkVeXh7XXnsty5cvP+OGgCIiUrMUl1Uw7aNtvL/xlwtHrmnTmL8MiiW0oX5+S9WyGIZhmB2iutntdgIDA8nPzycgIMDsOCIidcKurAJGp6azN6cQqwUmJLZj9I1t8LJazI4mtcSlfH7XuKuoRETEsxiGwXsbDvP0x9soKXcS2tDGrCFxXN2qsdnRxIOp4IiIiNsUllbw5JItfJR5DIDftWvCa/fEENJAV7aKe6ngiIiIW2w7ls/Y1Az2nyzCy2ph4s3tePB3rbFqSkqqgQqOiIhUKcMwmL/2EM8s205ZhZOIQD9mDYnjqpbBZkeTOkQFR0REqoy9pJwpH27h083HAbipQyiv3h1Do/q+JieTukYFR0REqsSWI/mMTk3nUG4x3lYLk/q254FrW2lKSkyhgiMiIlfEMAz+/cNPPP/ZTsocTpoG1WP20Di6N29kdjSpw1RwRETksuUXlzPpg018se2X3zl4c6cwXr4rhkB/H5OTSV2ngiMiIpcl49DPjF2QwZGfT+PjZWHKLR0ZcU1LLBZNSYn5VHBEROSSGIbBG2sO8MLnO6lwGjQP9mfO0Di6NQsyO5qIiwqOiIhctJ+Lynjs/U18tSMHgH5dw3lhYDcC/DQlJTWLCo6IiFyUjQdzGZuawbH8Eny9rUy9tRN/SGiuKSmpkVRwRETkvJxOg79/u59XvtyFw2kQHVKf2UPi6NI00OxoIuekgiMiIud0qrCU5Pc28c3uEwDcERvJc7/vSgObPj6kZtPfUBEROau1+08xbmEG2fZSbN5Wpt/emUFXRWlKSmoFFRwREanE4TT469d7+ctXu3Ea0LpJfeYO606H8ACzo4lcNBUcERFxOVFQyiOLMlmz9yQAA7s3Y8aAzvj76uNCahf9jRUREQB+2HuS8YsyOVFQSj0fL2YM6MJdPZqZHUvksqjgiIjUcQ6nwesr9zB71R4MA9qFNWDu0O60DWtodjSRy6aCIyJSh2XbSxi/MIMf9+cCMPiqKJ6+rTP1fL1MTiZyZVRwRETqqG92nyB5USanisqo7+vF83d25Y7YpmbHEqkSKjgiInVMhcPJqyt287fV+wDoGBHA3KFxtGrSwORkIlVHBUdEpA45lneacQsy2HDwZwCGJTRn6q2d8PPRlJR4FhUcEZE6YtXObJLf20RecTkNbN68MLArt3aLNDuWiFuo4IiIeLhyh5OXv9jFP77dD0DXpoHMGRpHi8b1TU4m4j4qOCIiHuzIz8WMSc0g83AeAPf1bsmUfh2weWtKSjybCo6IiIf6YlsWjy3ehL2kggA/b166K4a+XcLNjiVSLVRwREQ8TFmFk5TPd/DW9z8BEBMVxJwhcUQF+5sbTKQaqeCIiHiQQ6eKGbMgnc1H8gEYeV00jyV1wNfbanIykeqlgiMi4iE+23Kcx9/fTEFpBYH1fHj17hgSO4WZHUvEFCo4IiK1XEm5g+c+3cH//XgQgB4tGjFrSBxNg+qZnEzEPNVyznLu3Lm0bNkSPz8/EhISWLdu3TnH/vOf/+S6666jUaNGNGrUiMTExDPG33fffVgslkqPvn37uns3RERqnAMni7jzrz+4ys2D17dm4airVW6kznN7wVm0aBHJyck8/fTTpKenExMTQ1JSEjk5OWcdv3r1aoYMGcLXX39NWloaUVFR3HzzzRw9erTSuL59+3L8+HHXY8GCBe7eFRGRGuWjzKPcOus7th+3E1zfl7dGXMXkWzrg46Xv24hYDMMw3PkGCQkJXHXVVcyZMwcAp9NJVFQUY8eOZfLkyRdc3+Fw0KhRI+bMmcO9994L/HIGJy8vj6VLl15WJrvdTmBgIPn5+QQEBFzWNkREzFJS7mD6J9tYsO4wAD2jg5k1OI7wQD+Tk4m416V8fru15peVlbFx40YSExP/84ZWK4mJiaSlpV3UNoqLiykvLyc4OLjS8tWrVxMaGkr79u156KGHOHXq1Dm3UVpait1ur/QQEamN9uYUMmDu9yxYdxiLBcbe1IbUBxJUbkR+w61fMj558iQOh4OwsMrf4g8LC2Pnzp0XtY3HH3+cyMjISiWpb9++3HnnnURHR7Nv3z6eeOIJbrnlFtLS0vDyOvPunCkpKUyfPv3KdkZExGQfbDzCU0u3crrcQUgDX2YOiuPatiFmxxKpkWr0VVQvvPACCxcuZPXq1fj5/ef/nQwePNj1565du9KtWzdat27N6tWr6dOnzxnbmTJlCsnJya7ndrudqKgo94YXEakixWUVTPtoG+9vPAJA79aNmTkoltAAnbURORe3FpyQkBC8vLzIzs6utDw7O5vw8PPfLvyVV17hhRde4KuvvqJbt27nHduqVStCQkLYu3fvWQuOzWbDZrNd+g6IiJhsd3YBo+ensyenEKsFxvdpx5ib2uBltZgdTaRGc+t3cHx9fenRowcrV650LXM6naxcuZJevXqdc72XXnqJGTNmsHz5cuLj4y/4PkeOHOHUqVNERERUSW4REbMZhsF76w9z+5w17MkpJLShjfkPXM34xLYqNyIXwe1TVMnJyQwfPpz4+Hh69uzJzJkzKSoqYsSIEQDce++9NG3alJSUFABefPFFpk2bRmpqKi1btiQrKwuABg0a0KBBAwoLC5k+fToDBw4kPDycffv2MWnSJNq0aUNSUpK7d0dExO2KSit4cskWlmYeA+C6tiH8ZVAsIQ10JlrkYrm94AwaNIgTJ04wbdo0srKyiI2NZfny5a4vHh86dAir9T8nkv72t79RVlbGXXfdVWk7Tz/9NH/+85/x8vJi8+bN/Pvf/yYvL4/IyEhuvvlmZsyYoWkoEan1th+zMyY1nf0ni/CyWph4czse/F1rrDprI3JJ3H4fnJpI98ERkZrGMAxS1x1i+ifbKatwEhHox6whcVzVMvjCK4vUEZfy+V2jr6ISEakLCkrKmfzhFj7dfByAmzqE8srdMQTX9zU5mUjtpYIjImKiLUfyGbMgnYOnivG2WpjUtz0PXNtKU1IiV0gFR0TEBIZh8O8ffuL5z3ZS5nDSNKges4fG0b15I7OjiXgEFRwRkWqWX1zOpA828cW2X+4R9j+dwnjlrhgC/X1MTibiOVRwRESqUebhPMakpnPk59P4eFmYcktHRlzTEotFU1IiVUkFR0SkGhiGwRtrDvDC5zupcBpEBddjzpDuxEQFmR1NxCOp4IiIuFlecRmPLt7EVztyAOjXNZwXBnYjwE9TUiLuooIjIuJGGw/mMjY1g2P5Jfh6WZl6a0f+cHULTUmJuJkKjoiIGzidBn//dj+vfLkLh9OgZWN/5gztTpemgWZHE6kTVHBERKrYqcJSJi7exOpdJwC4PSaS5+/sSgObfuSKVBf9axMRqUJr959i3MIMsu2l2Lyt/Pn2zgy+KkpTUiLVTAVHRKQKOJwGf/16L3/5ajdOA1o1qc/cod3pGKHfdydiBhUcEZErdKKglOT3Mvluz0kA7oxryowBXaivKSkR0+hfn4jIFfhh70nGL8rkREEpfj5WZtzRhbvjo8yOJVLnqeCIiFwGh9Pg9ZV7mL1qD4YB7cIaMGdod9qFNTQ7moiggiMicsly7CWMW5jBj/tzARgUH8Wfb+9MPV8vk5OJyK9UcERELsG3u0/wyKJMThWV4e/rxfO/78qAuKZmxxKR31DBERG5CBUOJ3/5ajd/Xb0Pw4COEQHMHRpHqyYNzI4mImehgiMicgHH808zbkEG63/6GYBhCc2Zemsn/Hw0JSVSU6ngiIicx9c7c0h+L5Ofi8tpYPPmhYFdubVbpNmxROQCVHBERM6i3OHklS928fdv9wPQpWkAc4d2p0Xj+iYnE5GLoYIjIvIbR/NOMzY1nfRDeQDc17slU/p1wOatKSmR2kIFR0Tkv6zYns2jizeRf7qchn7evHxXN/p2iTA7lohcIhUcERGgrMLJi8t38saaAwDERAUxZ0gcUcH+JicTkcuhgiMidd7h3GLGpKaz6Ug+APdfG83jfTvg6201OZmIXC4VHBGp0z7fcpxJH2ymoKSCwHo+vHp3DImdwsyOJSJXSAVHROqkknIHz3+2g3fSDgLQo0UjZg2Jo2lQPZOTiUhVUMERkTrnp5NFjE5NZ9sxOwD/e30rHr25PT5empIS8RQqOCJSp3y86RhPfLiFwtIKguv78uo9MdzYPtTsWCJSxVRwRKROKCl3MP2T7SxYdwiAni2DmTUkjvBAP5OTiYg7qOCIiMfbd6KQ0fPT2ZlVgMUCY25sw/g+bfHWlJSIx6qWf91z586lZcuW+Pn5kZCQwLp16847fvHixXTo0AE/Pz+6du3KZ599Vul1wzCYNm0aERER1KtXj8TERPbs2ePOXRCRWmpJxhFum72GnVkFhDTw5Z0/9WTize1VbkQ8nNv/hS9atIjk5GSefvpp0tPTiYmJISkpiZycnLOO/+GHHxgyZAj3338/GRkZDBgwgAEDBrB161bXmJdeeolZs2Yxb9481q5dS/369UlKSqKkpMTduyMitcTpMgePLd7EI4s2UVzmoFerxnw27jqua9vE7GgiUg0shmEY7nyDhIQErrrqKubMmQOA0+kkKiqKsWPHMnny5DPGDxo0iKKiIpYtW+ZadvXVVxMbG8u8efMwDIPIyEgmTpzIo48+CkB+fj5hYWG8/fbbDB48+IKZ7HY7gYGB5OfnExAQUEV7KiI1xe7sAkbPT2dPTiEWC4zv05axN7XFy2oxO5qIXIFL+fx26xmcsrIyNm7cSGJi4n/e0GolMTGRtLS0s66TlpZWaTxAUlKSa/yBAwfIysqqNCYwMJCEhIRzbrO0tBS73V7pISKexzAM3ttwmNvnrGFPTiFNGtqY/0ACExLbqdyI1DFuLTgnT57E4XAQFlb5rqBhYWFkZWWddZ2srKzzjv/1fy9lmykpKQQGBroeUVFRl7U/IlJzFZVWMPG9TUx6fzMl5U6uaxvC5+Ovo3frELOjiYgJ6sS37KZMmUJ+fr7rcfjwYbMjiUgV2nHczm1z1vBhxlGsFngsqT3/HtGTkAY2s6OJiEncepl4SEgIXl5eZGdnV1qenZ1NeHj4WdcJDw8/7/hf/zc7O5uIiIhKY2JjY8+6TZvNhs2mH3QinsYwDBasO8z0T7ZRWuEkPMCPWUPi6BkdbHY0ETGZW8/g+Pr60qNHD1auXOla5nQ6WblyJb169TrrOr169ao0HmDFihWu8dHR0YSHh1caY7fbWbt27Tm3KSKep6CknHELM3liyRZKK5zc0L4Jn42/TuVGRIBquNFfcnIyw4cPJz4+np49ezJz5kyKiooYMWIEAPfeey9NmzYlJSUFgPHjx3P99dfz6quv0r9/fxYuXMiGDRv4xz/+AYDFYmHChAk8++yztG3blujoaKZOnUpkZCQDBgxw9+6ISA2w9Wg+Y1LT+elUMd5WC48ltWfkda2w6ovEIvL/ub3gDBo0iBMnTjBt2jSysrKIjY1l+fLlri8JHzp0CKv1PyeSevfuTWpqKk899RRPPPEEbdu2ZenSpXTp0sU1ZtKkSRQVFTFq1Cjy8vK49tprWb58OX5+uuW6iCczDIP/+/Egzy7bQZnDSdOgeswaEkePFo3MjiYiNYzb74NTE+k+OCK1T/7pcqZ8uJnPtvxyteT/dArj5bu6EeTva3IyEakul/L5rd9FJSI13qbDeYxZkM7h3NP4eFmYcktHRlzTEotFU1IicnYqOCJSYxmGwVvf/0TK5zsodxhEBddjzpDuxEQFmR1NRGo4FRwRqZHyist4dPFmvtrxy20jbukSzgsDuxFYz8fkZCJSG6jgiEiNs/Hgz4xbkMHRvNP4elmZemtH/nB1C01JichFU8ERkRrD6TT453f7efmLXVQ4DVo29mfO0O50aRpodjQRqWVUcESkRsgtKiP5vUxW7zoBwG0xkTz/+y409NOUlIhcOhUcETHdugO5jFuQQZa9BJu3ladv68yQnlGakhKRy6aCIyKmcToN/vbNPl79chdOA1o1qc/cod3pGKH7U4nIlVHBERFTnCgoJfm9TL7bcxKAO+OaMmNAF+rb9GNJRK6cfpKISLX7Yd9Jxi/M5ERBKX4+Vp65owt392imKSkRqTIqOCJSbRxOg9mr9jBr5R6cBrQNbcBfh3WnbVhDs6OJiIdRwRGRapFjL2HCokx+2HcKgHvimzH99i7U8/UyOZmIeCIVHBFxu+/2nOCRRZmcLCzD39eL537fhd/HNTM7loh4MBUcEXGbCoeTmV/tYe7qvRgGdAhvyJyh3WkT2sDsaCLi4VRwRMQtsvJLGLcgg3U/5QIwNKE5027thJ+PpqRExP1UcESkyn29K4eJ720it6iMBjZvnr+zK7fHRJodS0TqEBUcEaky5Q4nr3y5i79/sx+AzpEBzBnaneiQ+iYnE5G6RgVHRKrE0bzTjFuQwcaDPwMwvFcLpvTrqCkpETGFCo6IXLGvtmfz6PubyCsup6GfNy8N7MYtXSPMjiUidZgKjohctrIKJy8t38m/1hwAIKZZILOHdKd5Y3+Tk4lIXaeCIyKX5XBuMWMWZLDpcB4A918bzeN9O+DrbTU3mIgIKjgichmWb83isfc3UVBSQWA9H165O4b/6RRmdiwRERcVHBG5aKUVDp7/dAf/TjsIQPfmQcwe2p2mQfVMTiYiUpkKjohclJ9OFjFmQTpbj9oB+N/rW/Hoze3x8dKUlIjUPCo4InJByzYfY/IHWygsraCRvw+v3RPLjR1CzY4lInJOKjgick4l5Q5mLNvO/LWHAOjZMpjXh8QSEagpKRGp2VRwROSs9p0oZPT8dHZmFWCxwOgb2jAhsS3empISkVpABUdEzrAk4whPLtlKcZmDkAa+/GVQLNe1bWJ2LBGRi6aCIyIup8scPP3xVt7bcASAXq0a8/rgWEID/ExOJiJyaVRwRASAPdkFPDw/nT05hVgsML5PW8be1BYvq8XsaCIil0wFR6SOMwyDxRuPMO2jrZSUO2nS0Mbrg2Pp3TrE7GgiIpfNrd8WzM3NZdiwYQQEBBAUFMT9999PYWHhecePHTuW9u3bU69ePZo3b864cePIz8+vNM5isZzxWLhwoTt3RcQjFZVWMPG9TUx6fzMl5U6uaxvCZ+OuU7kRkVrPrWdwhg0bxvHjx1mxYgXl5eWMGDGCUaNGkZqaetbxx44d49ixY7zyyit06tSJgwcP8uCDD3Ls2DHef//9SmPfeust+vbt63oeFBTkzl0R8Tg7jtsZk5rOvhNFWC0w8eb2PHR9a6yakhIRD2AxDMNwx4Z37NhBp06dWL9+PfHx8QAsX76cfv36ceTIESIjIy9qO4sXL+YPf/gDRUVFeHv/0scsFgtLlixhwIABl5XNbrcTGBhIfn4+AQEBl7UNkdrKMAwWrDvM9E+2UVrhJDzAj9cHx5LQqrHZ0UREzutSPr/dNkWVlpZGUFCQq9wAJCYmYrVaWbt27UVv59ed+LXc/Gr06NGEhITQs2dP3nzzTc7X00pLS7Hb7ZUeInVRQUk54xZm8sSSLZRWOLmhfRM+G3+dyo2IeBy3TVFlZWURGlr5Vu7e3t4EBweTlZV1Uds4efIkM2bMYNSoUZWWP/PMM9x00034+/vz5Zdf8vDDD1NYWMi4cePOup2UlBSmT59+eTsi4iG2Hs1nTGo6P50qxstqYVJSe0Ze10pTUiLikS654EyePJkXX3zxvGN27Nhx2YF+Zbfb6d+/P506deLPf/5zpdemTp3q+nNcXBxFRUW8/PLL5yw4U6ZMITk5udK2o6KirjijSG1gGAbv/niQGct2UOZwEhnox+yh3enRopHZ0URE3OaSC87EiRO57777zjumVatWhIeHk5OTU2l5RUUFubm5hIeHn3f9goIC+vbtS8OGDVmyZAk+Pj7nHZ+QkMCMGTMoLS3FZrOd8brNZjvrchFPZy8pZ/IHm/lsyy9nTRM7hvHK3d0I8vc1OZmIiHtdcsFp0qQJTZpc+JbtvXr1Ii8vj40bN9KjRw8AVq1ahdPpJCEh4Zzr2e12kpKSsNlsfPzxx/j5XfgOqpmZmTRq1EglRuS/bD6Sx+jUdA7nnsbHy8LjfTtw/7XRWCyakhIRz+e27+B07NiRvn37MnLkSObNm0d5eTljxoxh8ODBriuojh49Sp8+fXjnnXfo2bMndrudm2++meLiYt59991KXwhu0qQJXl5efPLJJ2RnZ3P11Vfj5+fHihUreP7553n00UfdtSsitYphGLz1/U+kfL6DcodBs0b1mDO0O7FRQWZHExGpNm69D878+fMZM2YMffr0wWq1MnDgQGbNmuV6vby8nF27dlFcXAxAenq66wqrNm3aVNrWgQMHaNmyJT4+PsydO5dHHnkEwzBo06YNr732GiNHjnTnrojUCnnFZTz2/mZWbM8GoG/ncF68qxuB9c4/zSsi4mncdh+cmkz3wRFPlH7oZ8amZnA07zS+XlaeurUjf7y6haakRMRjXMrnt34XlUgt53Qa/GvNfl5avosKp0GLxv7MHdqdLk0DzY4mImIaFRyRWiy3qIxHF29i1c5frli8tVsEKXd2paGfpqREpG5TwRGppdb/lMu4BRkczy/B5m3l6ds6M6RnlKakRERQwRGpdZxOg799s4/XVuzG4TRo1aQ+c4d2p2OEvk8mIvIrFRyRWuRkYSmPLMrkuz0nAfh9XFOeHdCF+jb9UxYR+W/6qShSS6TtO8X4hRnkFJTi52PlmTu6cHePZpqSEhE5CxUckRrO4TSYs2ovr6/cjdOAtqENmDusO+3CGpodTUSkxlLBEanBcgpKmLAwkx/2nQLgnvhmTL+9C/V8vUxOJiJSs6ngiNRQa/acZMKiDE4WluHv68WzA7pwZ/dmZscSEakVVHBEapgKh5OZX+1h7uq9GAZ0CG/InKHdaRPawOxoIiK1hgqOSA2SlV/CuIUZrDuQC8DQhOZMu7UTfj6akhIRuRQqOCI1xOpdOSS/t4ncojLq+3qRMrAbt8dEmh1LRKRWUsERMVm5w8mrX+5m3jf7AOgcGcCcod2JDqlvcjIRkdpLBUfEREfzTjNuQQYbD/4MwL29WvBEv46akhIRuUIqOCIm+Wp7No++v4m84nIa+nnz0sBu3NI1wuxYIiIeQQVHpJqVVTh5aflO/rXmAADdmgUyZ0h3mjf2NzmZiIjnUMERqUaHc4sZsyCDTYfzAPjTNdFMvqUDvt5Wc4OJiHgYFRyRarJ8axaPvb+JgpIKAvy8eeXuGG7uHG52LBERj6SCI+JmpRUOUj7byds//ARAXPMgZg+Jo1kjTUmJiLiLCo6IGx08VcSY1Ay2HM0H4H9/14pHk9rj46UpKRERd1LBEXGTZZuPMeWDLRSUVtDI34dX74nhpg5hZscSEakTVHBEqlhJuYMZy7Yzf+0hAK5q2YhZQ+KICKxncjIRkbpDBUekCu0/Ucjo1Ax2HLdjscDDN7TmkcR2eGtKSkSkWqngiFSRjzKP8sSHWygqc9C4vi9/GRTL79o1MTuWiEidpIIjcoVOlzn488fbWLThMABXtwrm9cFxhAX4mZxMRKTuUsERuQJ7cwoYPT+DXdkFWCww9qa2jO/TFi+rxexoIiJ1mgqOyGV6f+MRpi7dyulyB00a2nh9UCy924SYHUtERFDBEblkRaUVTPtoGx+kHwHg2jYh/GVQLE0a2kxOJiIiv1LBEbkEO7PsjJ6fzr4TRVgt8EhiOx6+sY2mpEREahgVHJGLYBgGC9cf5s8fb6O0wklYgI1Zg+NIaNXY7GgiInIWKjgiF1BYWsETH27h403HALi+XRNeuyeGxg00JSUiUlO59e5jubm5DBs2jICAAIKCgrj//vspLCw87zo33HADFoul0uPBBx+sNObQoUP0798ff39/QkNDeeyxx6ioqHDnrkgdtfVoPrfO+o6PNx3Dy2rh8b4deOu+q1RuRERqOLeewRk2bBjHjx9nxYoVlJeXM2LECEaNGkVqaup51xs5ciTPPPOM67m//39+67LD4aB///6Eh4fzww8/cPz4ce699158fHx4/vnn3bYvUrcYhsG7Px5kxrIdlDmcRAb6MXtoHD1aBJsdTURELoLFMAzDHRvesWMHnTp1Yv369cTHxwOwfPly+vXrx5EjR4iMjDzrejfccAOxsbHMnDnzrK9//vnn3HrrrRw7doywsF9+ceG8efN4/PHHOXHiBL6+vhfMZrfbCQwMJD8/n4CAgMvbQfFY9pJyJn+wmc+2ZAGQ2DGUl++KoVH9C//dEhER97mUz2+3TVGlpaURFBTkKjcAiYmJWK1W1q5de95158+fT0hICF26dGHKlCkUFxdX2m7Xrl1d5QYgKSkJu93Otm3bzrq90tJS7HZ7pYfI2Ww+kkf/Wd/x2ZYsvK0WnurfkX/eG69yIyJSy7htiiorK4vQ0NDKb+btTXBwMFlZWedcb+jQobRo0YLIyEg2b97M448/zq5du/jwww9d2/3vcgO4np9ruykpKUyfPv1Kdkc8nGEYvPX9T6R8voNyh0HToHrMGRpHXPNGZkcTEZHLcMkFZ/Lkybz44ovnHbNjx47LDjRq1CjXn7t27UpERAR9+vRh3759tG7d+rK2OWXKFJKTk13P7XY7UVFRl51RPEt+cTmPvb+JL7dnA5DUOYyXBsYQ6O9jcjIREblcl1xwJk6cyH333XfeMa1atSI8PJycnJxKyysqKsjNzSU8PPyi3y8hIQGAvXv30rp1a8LDw1m3bl2lMdnZv3wwnWu7NpsNm01XvciZ0g/9zNjUDI7mncbXy8oT/TowvHdLLBbduE9EpDa75ILTpEkTmjRpcsFxvXr1Ii8vj40bN9KjRw8AVq1ahdPpdJWWi5GZmQlARESEa7vPPfccOTk5rimwFStWEBAQQKdOnS5xb6SucjoN/rVmPy8t30WF06B5sD9zh3ana7NAs6OJiEgVcNtVVAC33HIL2dnZzJs3z3WZeHx8vOsy8aNHj9KnTx/eeecdevbsyb59+0hNTaVfv340btyYzZs388gjj9CsWTO++eYb4JfLxGNjY4mMjOSll14iKyuLP/7xjzzwwAMXfZm4rqKq234uKmPi4k2s2vnLGcb+3SJIubMrAX6akhIRqcku5fPbrffBmT9/PmPGjKFPnz5YrVYGDhzIrFmzXK+Xl5eza9cu11VSvr6+fPXVV8ycOZOioiKioqIYOHAgTz31lGsdLy8vli1bxkMPPUSvXr2oX78+w4cPr3TfHJFz2fBTLmMXZHA8vwRfbyvTbu3EsITmmpISEfEwbj2DU1PpDE7d43Qa/O2bfby2YjcOp0F0SH3mDI2jc6SmpEREaosacwZHpCY4WVhK8nub+Hb3CQDuiI3kud93pYFNf/1FRDyVfsKLR/tx/ynGLcggp6AUPx8r02/vzD3xUZqSEhHxcCo44pEcToM5q/by+srdOA1oE9qAuUO70z68odnRRESkGqjgiMfJKSjhkUWZfL/3FAB39WjGM3d0xt9Xf91FROoK/cQXj/L93pOMX5jJycJS6vl48dzvu3Bn92ZmxxIRkWqmgiMeocLhZNbKPcz+ei+GAR3CGzJnaHfahDYwO5qIiJhABUdqvWx7CWMXZLDuQC4AQ3pG8fRtnfHz8TI5mYiImEUFR2q11btySH5vE7lFZdT39eL5O7tyR2xTs2OJiIjJVHCkVqpwOHl1xW7+tnofAJ0iApg7rDvRIfVNTiYiIjWBCo7UOsfyTjNuQQYbDv4MwB+vbsGT/TtqSkpERFxUcKRWWbkjm4mLN5FXXE5DmzcvDOxG/24RZscSEZEaRgVHaoWyCicvLd/Jv9YcAKBbs0DmDOlO88b+JicTEZGaSAVHarzDucWMXZBB5uE8AEZc05LJt3TA5q0pKREROTsVHKnRlm/NYtL7m7CXVBDg583Ld8eQ1Dnc7FgiIlLDqeBIjVRa4SDls528/cNPAMRGBTFnaBzNGmlKSkRELkwFR2qcg6eKGJOawZaj+QCM+l0rHktqj4+X1eRkIiJSW6jgSI3y6ebjTP5gMwWlFQT5+/DaPTHc1CHM7FgiIlLLqOBIjVBS7uDZT7fz7o+HAIhv0YhZQ+KIDKpncjIREamNVHDEdPtPFDI6NYMdx+0APHxDa5L/px3empISEZHLpIIjpvoo8yhPfLiFojIHwfV9+cugWK5v18TsWCIiUsup4IgpTpc5mP7JNhauPwxAQnQws4bEERbgZ3IyERHxBCo4Uu325hQwen4Gu7ILsFhg7I1tGNenraakRESkyqjgSLX6YOMRnlq6ldPlDkIa2Jg5KJZr24aYHUtERDyMCo5Ui+KyCqYu3cYH6UcAuKZNY/4yKJbQhpqSEhGRqqeCI263K6uAh+dvZN+JIqwWmJDYjtE3tsHLajE7moiIeCgVHHEbwzBYtP4wT3+8jdIKJ2EBNl4fHMfVrRqbHU1ERDycCo64RWFpBU8u2cJHmccAuL5dE167J4bGDWwmJxMRkbpABUeq3LZj+YxNzWD/ySK8rBYevbk9//u7Vlg1JSUiItVEBUeqjGEYvLv2EDOWbaeswklEoB+zh8QR3zLY7GgiIlLHqOBIlbCXlDPlwy18uvk4AH06hPLK3TE0qu9rcjIREamLVHDkim0+kseY1AwO5RbjbbUw+ZYO3H9tNBaLpqRERMQcbr11bG5uLsOGDSMgIICgoCDuv/9+CgsLzzn+p59+wmKxnPWxePFi17izvb5w4UJ37oqchWEYvPX9AQb+7QcO5RbTNKgeix/sxQPXtVK5ERERU7n1DM6wYcM4fvw4K1asoLy8nBEjRjBq1ChSU1PPOj4qKorjx49XWvaPf/yDl19+mVtuuaXS8rfeeou+ffu6ngcFBVV5fjm3/OJyHnt/E19uzwbg5k5hvHxXDIH+PiYnExERcWPB2bFjB8uXL2f9+vXEx8cDMHv2bPr168crr7xCZGTkGet4eXkRHh5eadmSJUu45557aNCgQaXlQUFBZ4yV6pFx6GfGpGZwNO80vl5WnujXgeG9W+qsjYiI1Bhum6JKS0sjKCjIVW4AEhMTsVqtrF279qK2sXHjRjIzM7n//vvPeG306NGEhITQs2dP3nzzTQzDOOd2SktLsdvtlR5y6ZxOg39+u5+756VxNO80zYP9ef+hXtx3jb5vIyIiNYvbzuBkZWURGhpa+c28vQkODiYrK+uitvHGG2/QsWNHevfuXWn5M888w0033YS/vz9ffvklDz/8MIWFhYwbN+6s20lJSWH69OmXtyMCwM9FZUxcvIlVO3MA6N81gpSBXQnw05SUiIjUPJdccCZPnsyLL7543jE7duy47EC/On36NKmpqUydOvWM1/57WVxcHEVFRbz88svnLDhTpkwhOTnZ9dxutxMVFXXFGeuKDT/lMnZBBsfzS/D1tjLt1k4MS2iuszYiIlJjXXLBmThxIvfdd995x7Rq1Yrw8HBycnIqLa+oqCA3N/eivjvz/vvvU1xczL333nvBsQkJCcyYMYPS0lJstjN/FYDNZjvrcjk/p9Ng3rf7ePXL3TicBtEh9ZkzNI7OkYFmRxMRETmvSy44TZo0oUmTJhcc16tXL/Ly8ti4cSM9evQAYNWqVTidThISEi64/htvvMHtt99+Ue+VmZlJo0aNVGKq0KnCUpLf28Q3u08AcEdsJM/9visNbLp1koiI1Hxu+7Tq2LEjffv2ZeTIkcybN4/y8nLGjBnD4MGDXVdQHT16lD59+vDOO+/Qs2dP17p79+7l22+/5bPPPjtju5988gnZ2dlcffXV+Pn5sWLFCp5//nkeffRRd+1KnfPj/lOMX5hBtr0Um7eVZ+7ozD3xUZqSEhGRWsOt/3d8/vz5jBkzhj59+mC1Whk4cCCzZs1yvV5eXs6uXbsoLi6utN6bb75Js2bNuPnmm8/Ypo+PD3PnzuWRRx7BMAzatGnDa6+9xsiRI925K3WCw2kw9+u9zPxqN04DWjepz1+H9aB9eEOzo4mIiFwSi3G+66s9lN1uJzAwkPz8fAICAsyOUyPkFJTwyKJMvt97CoCB3ZsxY0Bn/H01JSUiIjXDpXx+69NL+H7vScYvzORkYSn1fLyYMaALd/VoZnYsERGRy6aCU4c5nAavr9zD7FV7MAxoH9aQOUPjaBumKSkREandVHDqqGx7CeMWZLD2QC4Ag+Kj+PPtnann62VyMhERkSunglMHfbP7BMmLMjlVVEZ9Xy+ev7Mrd8Q2NTuWiIhIlVHBqUMqHE5eW7Gbv67eB0DHiADmDo2jVZMGF1hTRESkdlHBqSOO5Z1m3IIMNhz8GYBhCc2Zemsn/Hw0JSUiIp5HBacOWLUzm+T3NpFXXE5DmzcpA7tya7dIs2OJiIi4jQqOByt3OHn5i13849v9AHRtGsicoXG0aFzf5GQiIiLupYLjoY78XMyY1AwyD+cBcF/vlkzp1wGbt6akRETE86ngeKAvtmXx2OJN2EsqCPDz5uW7Y0jqfOHf4C4iIuIpVHA8SFmFk5TPd/DW9z8BEBsVxOwhcUQF+5sbTEREpJqp4HiIQ6eKGbMgnc1H8gEYeV00jyV1wNfbanIyERGR6qeC4wE+23Kcx9/fTEFpBUH+Prx6dwx9OoaZHUtERMQ0Kji1WEm5g2c/3c67Px4CIL5FI2YNiSMyqJ7JyURERMylglNL7T9RyJjUDLYftwPw0A2tSf6fdvh4aUpKREREBacW+ijzKE98uIWiMgfB9X157Z4YbmgfanYsERGRGkMFpxY5XeZg+ifbWLj+MAA9o4OZNTiO8EA/k5OJiIjULCo4tcTenAJGz89gV3YBFguMvbEN4/q0xVtTUiIiImdQwakF3t94hKlLt3K63EFIAxszB8VybdsQs2OJiIjUWCo4NVhxWQVTl27jg/QjAPRu3ZiZg2MJbagpKRERkfNRwamhdmUVMDo1nb05hVgtMCGxHaNvbIOX1WJ2NBERkRpPBaeGMQyD9zYc5umPt1FS7iS0oY3XB8fRq3Vjs6OJiIjUGio4NUhhaQVPLdnC0sxjAFzXNoS/DIolpIHN5GQiIiK1iwpODbH9mJ0xqensP1mEl9XCxJvb8eDvWmPVlJSIiMglU8ExmWEYzF97iGeWbaeswklEoB+zhsRxVctgs6OJiIjUWio4JrKXlDPlwy18uvk4ADd1COWVu2MIru9rcjIREZHaTQXHJFuO5DNmQToHTxXjbbUwqW97Hri2laakREREqoAKTjUzDIN///ATz3+2kzKHk6ZB9Zg9NI7uzRuZHU1ERMRjqOBUo/ziciZ9sIkvtmUDcHOnMF6+K4ZAfx+Tk4mIiHgWFZxqknk4jzGp6Rz5+TQ+Xhae6NeR+3q3xGLRlJSIiEhVU8FxM8MweGPNAV74fCcVToPmwf7MGRpHt2ZBZkcTERHxWG77VdTPPfccvXv3xt/fn6CgoItaxzAMpk2bRkREBPXq1SMxMZE9e/ZUGpObm8uwYcMICAggKCiI+++/n8LCQjfswZXLKy5j5DsbePbTHVQ4Dfp3jWDZuGtVbkRERNzMbQWnrKyMu+++m4ceeuii13nppZeYNWsW8+bNY+3atdSvX5+kpCRKSkpcY4YNG8a2bdtYsWIFy5Yt49tvv2XUqFHu2IUrsvFgLv1e/46vduTg621lxoAuzBkaR4Cfvm8jIiLibhbDMAx3vsHbb7/NhAkTyMvLO+84wzCIjIxk4sSJPProowDk5+cTFhbG22+/zeDBg9mxYwedOnVi/fr1xMfHA7B8+XL69evHkSNHiIyMvKhMdrudwMBA8vPzCQgIuKL9+y2n0+Dv3+7nlS934XAaRIfUZ87QODpHBlbp+4iIiNQ1l/L57bYzOJfqwIEDZGVlkZiY6FoWGBhIQkICaWlpAKSlpREUFOQqNwCJiYlYrVbWrl17zm2XlpZit9srPdzhVGEpI95ez4vLd+JwGtwRG8knY69VuREREalmNabgZGVlARAWFlZpeVhYmOu1rKwsQkNDK73u7e1NcHCwa8zZpKSkEBgY6HpERUVVcfpfzF61l292n8DmbeXFgV2ZOSiWBjZ9j1tERKS6XVLBmTx5MhaL5byPnTt3uivrZZsyZQr5+fmux+HDh93yPo8mtSexYxgfj7mWQVc11yXgIiIiJrmk0wsTJ07kvvvuO++YVq1aXVaQ8PBwALKzs4mIiHAtz87OJjY21jUmJyen0noVFRXk5ua61j8bm82GzWa7rFyXooHNm38Nj7/wQBEREXGrSyo4TZo0oUmTJm4JEh0dTXh4OCtXrnQVGrvdztq1a11XYvXq1Yu8vDw2btxIjx49AFi1ahVOp5OEhAS35BIREZHax23fwTl06BCZmZkcOnQIh8NBZmYmmZmZle5Z06FDB5YsWQKAxWJhwoQJPPvss3z88cds2bKFe++9l8jISAYMGABAx44d6du3LyNHjmTdunV8//33jBkzhsGDB1/0FVQiIiLi+dz2Ddhp06bx73//2/U8Li4OgK+//pobbrgBgF27dpGfn+8aM2nSJIqKihg1ahR5eXlce+21LF++HD8/P9eY+fPnM2bMGPr06YPVamXgwIHMmjXLXbshIiIitZDb74NTE7nzPjgiIiLiHrXyPjgiIiIiVUUFR0RERDyOCo6IiIh4HBUcERER8TgqOCIiIuJxVHBERETE46jgiIiIiMdRwRERERGPo4IjIiIiHsdtv6qhJvv15s12u93kJCIiInKxfv3cvphfwlAnC05BQQEAUVFRJicRERGRS1VQUEBgYOB5x9TJ30XldDo5duwYDRs2xGKxVOm27XY7UVFRHD58WL/nys10rKuPjnX10bGuPjrW1aeqjrVhGBQUFBAZGYnVev5v2dTJMzhWq5VmzZq59T0CAgL0D6aa6FhXHx3r6qNjXX10rKtPVRzrC525+ZW+ZCwiIiIeRwVHREREPI4KThWz2Ww8/fTT2Gw2s6N4PB3r6qNjXX10rKuPjnX1MeNY18kvGYuIiIhn0xkcERER8TgqOCIiIuJxVHBERETE46jgiIiIiMdRwalCc+fOpWXLlvj5+ZGQkMC6devMjlTrpaSkcNVVV9GwYUNCQ0MZMGAAu3btqjSmpKSE0aNH07hxYxo0aMDAgQPJzs42KbHneOGFF7BYLEyYMMG1TMe66hw9epQ//OEPNG7cmHr16tG1a1c2bNjget0wDKZNm0ZERAT16tUjMTGRPXv2mJi4dnI4HEydOpXo6Gjq1atH69atmTFjRqXfZaRjfXm+/fZbbrvtNiIjI7FYLCxdurTS6xdzXHNzcxk2bBgBAQEEBQVx//33U1hYWDUBDakSCxcuNHx9fY0333zT2LZtmzFy5EgjKCjIyM7ONjtarZaUlGS89dZbxtatW43MzEyjX79+RvPmzY3CwkLXmAcffNCIiooyVq5caWzYsMG4+uqrjd69e5uYuvZbt26d0bJlS6Nbt27G+PHjXct1rKtGbm6u0aJFC+O+++4z1q5da+zfv9/44osvjL1797rGvPDCC0ZgYKCxdOlSY9OmTcbtt99uREdHG6dPnzYxee3z3HPPGY0bNzaWLVtmHDhwwFi8eLHRoEED4/XXX3eN0bG+PJ999pnx5JNPGh9++KEBGEuWLKn0+sUc1759+xoxMTHGjz/+aHz33XdGmzZtjCFDhlRJPhWcKtKzZ09j9OjRrucOh8OIjIw0UlJSTEzleXJycgzA+OabbwzDMIy8vDzDx8fHWLx4sWvMjh07DMBIS0szK2atVlBQYLRt29ZYsWKFcf3117sKjo511Xn88ceNa6+99pyvO51OIzw83Hj55Zddy/Ly8gybzWYsWLCgOiJ6jP79+xt/+tOfKi278847jWHDhhmGoWNdVX5bcC7muG7fvt0AjPXr17vGfP7554bFYjGOHj16xZk0RVUFysrK2LhxI4mJia5lVquVxMRE0tLSTEzmefLz8wEIDg4GYOPGjZSXl1c69h06dKB58+Y69pdp9OjR9O/fv9IxBR3rqvTxxx8THx/P3XffTWhoKHFxcfzzn/90vX7gwAGysrIqHevAwEASEhJ0rC9R7969WblyJbt37wZg06ZNrFmzhltuuQXQsXaXizmuaWlpBAUFER8f7xqTmJiI1Wpl7dq1V5yhTv6yzap28uRJHA4HYWFhlZaHhYWxc+dOk1J5HqfTyYQJE7jmmmvo0qULAFlZWfj6+hIUFFRpbFhYGFlZWSakrN0WLlxIeno669evP+M1Heuqs3//fv72t7+RnJzME088wfr16xk3bhy+vr4MHz7cdTzP9jNFx/rSTJ48GbvdTocOHfDy8sLhcPDcc88xbNgwAB1rN7mY45qVlUVoaGil1729vQkODq6SY6+CI7XG6NGj2bp1K2vWrDE7ikc6fPgw48ePZ8WKFfj5+Zkdx6M5nU7i4+N5/vnnAYiLi2Pr1q3MmzeP4cOHm5zOs7z33nvMnz+f1NRUOnfuTGZmJhMmTCAyMlLH2sNpiqoKhISE4OXldcbVJNnZ2YSHh5uUyrOMGTOGZcuW8fXXX9OsWTPX8vDwcMrKysjLy6s0Xsf+0m3cuJGcnBy6d++Ot7c33t7efPPNN8yaNQtvb2/CwsJ0rKtIREQEnTp1qrSsY8eOHDp0CMB1PPUz5co99thjTJ48mcGDB9O1a1f++Mc/8sgjj5CSkgLoWLvLxRzX8PBwcnJyKr1eUVFBbm5ulRx7FZwq4OvrS48ePVi5cqVrmdPpZOXKlfTq1cvEZLWfYRiMGTOGJUuWsGrVKqKjoyu93qNHD3x8fCod+127dnHo0CEd+0vUp08ftmzZQmZmpusRHx/PsGHDXH/Wsa4a11xzzRm3O9i9ezctWrQAIDo6mvDw8ErH2m63s3btWh3rS1RcXIzVWvmjzsvLC6fTCehYu8vFHNdevXqRl5fHxo0bXWNWrVqF0+kkISHhykNc8deUxTCMXy4Tt9lsxttvv21s377dGDVqlBEUFGRkZWWZHa1We+ihh4zAwEBj9erVxvHjx12P4uJi15gHH3zQaN68ubFq1Spjw4YNRq9evYxevXqZmNpz/PdVVIahY11V1q1bZ3h7exvPPfecsWfPHmP+/PmGv7+/8e6777rGvPDCC0ZQUJDx0UcfGZs3bzbuuOMOXbp8GYYPH240bdrUdZn4hx9+aISEhBiTJk1yjdGxvjwFBQVGRkaGkZGRYQDGa6+9ZmRkZBgHDx40DOPijmvfvn2NuLg4Y+3atcaaNWuMtm3b6jLxmmj27NlG8+bNDV9fX6Nnz57Gjz/+aHakWg846+Ott95yjTl9+rTx8MMPG40aNTL8/f2N3//+98bx48fNC+1BfltwdKyrzieffGJ06dLFsNlsRocOHYx//OMflV53Op3G1KlTjbCwMMNmsxl9+vQxdu3aZVLa2stutxvjx483mjdvbvj5+RmtWrUynnzySaO0tNQ1Rsf68nz99ddn/fk8fPhwwzAu7rieOnXKGDJkiNGgQQMjICDAGDFihFFQUFAl+SyG8V+3cxQRERHxAPoOjoiIiHgcFRwRERHxOCo4IiIi4nFUcERERMTjqOCIiIiIx1HBEREREY+jgiMiIiIeRwVHREREPI4KjoiIiHgcFRwRERHxOCo4IiIi4nFUcERERMTj/D8kN2l/nIxTrAAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "lin = linear_encoding(100)\n",
    "plt.plot(lin.cpu().numpy())\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def encode_positions(pos_arr, min_val=None, max_val=None, linear=False, lin_range=(-1,1)):\n",
    "    \"\"\" Encodes an array with positions using a linear or sincos methods\n",
    "    \"\"\"\n",
    "\n",
    "    if min_val is None:\n",
    "        min_val = np.nanmin(pos_arr)\n",
    "    if max_val is None:\n",
    "        max_val = np.nanmax(pos_arr)\n",
    "\n",
    "    if linear:\n",
    "        return (((pos_arr - min_val)/(max_val - min_val)) * (lin_range[1] - lin_range[0]) + lin_range[0])\n",
    "    else:\n",
    "        sin = np.sin((pos_arr - min_val)/(max_val - min_val) * 2 * np.pi)\n",
    "        cos = np.cos((pos_arr - min_val)/(max_val - min_val) * 2 * np.pi)\n",
    "        return sin, cos"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "n_samples = 10\n",
    "length = 500\n",
    "_a = []\n",
    "for i in range(n_samples):\n",
    "    a = np.arange(-4000, 4000, 10)\n",
    "    mask = np.random.rand(len(a)) > .5\n",
    "    a = a[mask]\n",
    "    a = np.concatenate([a, np.array([np.nan] * (length - len(a)))])\n",
    "    _a.append(a.reshape(-1,1))\n",
    "a = np.concatenate(_a, -1).transpose(1,0)\n",
    "sin, cos = encode_positions(a, linear=False)\n",
    "test_eq(a.shape, (n_samples, length))\n",
    "test_eq(sin.shape, (n_samples, length))\n",
    "test_eq(cos.shape, (n_samples, length))\n",
    "plt.plot(sin.T)\n",
    "plt.plot(cos.T)\n",
    "plt.xlim(0, 500)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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jw/h4eE89NBDuFyujmzKJeHPf/4zgwYNap0EMDU1lQ0bNrTul77oHL/97W/R6XTcf//9rdukLzrOU089hU6na/Pq27dv6/4O7QvVxaxevVqZzWb1+uuvq6NHj6r58+crq9WqysrKOrtql5T169erRx99VH3wwQcKUGvXrm2z/7e//a0KDAxUH374oTp06JC69tprVffu3VVzc3NrmUmTJqnBgwerr776Su3atUv17NlT3XrrrR3ckovbxIkT1RtvvKEyMzNVRkaGmjJlioqPj1cNDQ2tZe666y4VFxentm7dqvbv369GjhypRo0a1brf5XKpgQMHqvHjx6uDBw+q9evXq9DQUPXwww93RpMuah9//LH65z//qXJyclR2drZ65JFHlMlkUpmZmUop6YvOsHfvXpWQkKAGDRqkfv7zn7dul77oOE8++aQaMGCAKikpaX1VVFS07u/IvuhyoSg5OVnde++9rT+73W4VHR2tli5d2om1urT9eyjSNE1FRkaq559/vnVbbW2tslgs6t1331VKKXXs2DEFqH379rWW2bBhg9LpdKqoqKjD6n6pKS8vV4DasWOHUspz3k0mk1qzZk1rmaysLAWo3bt3K6U8AVev16vS0tLWMn/+859VQECAstvtHduAS1BQUJD661//Kn3RCerr61WvXr3U5s2b1VVXXdUaiqQvOtaTTz6pBg8e/J37OrovutTtM4fDQXp6OuPHj2/dptfrGT9+PLt37+7EmnUtubm5lJaWtumHwMBAUlJSWvth9+7dWK1WkpKSWsuMHz8evV7Pnj17OrzOl4q6ujrg/xdFTk9Px+l0tumLvn37Eh8f36YvLrvsMiIiIlrLTJw4EZvNxtGjRzuw9pcWt9vN6tWraWxsJDU1VfqiE9x7771MnTq1zTkH+XvRGU6cOEF0dDSJiYnMmjWL/Px8oOP7okstCFtZWYnb7W5z4gAiIiI4fvx4J9Wq6yktLQX4zn74Zl9paSnh4eFt9huNRoKDg1vLiHOjaRr3338/l19+OQMHDgQ859lsNmO1WtuU/fe++K6++mafODdHjhwhNTWVlpYW/Pz8WLt2Lf379ycjI0P6ogOtXr2aAwcOsG/fvm/tk78XHSslJYU333yTPn36UFJSwpIlSxg9ejSZmZkd3hddKhQJ0ZXde++9ZGZm8vnnn3d2Vbq0Pn36kJGRQV1dHf/4xz+YPXs2O3bs6OxqdSkFBQX8/Oc/Z/PmzXh5eXV2dbq8yZMnt/550KBBpKSk0K1bN/7+97/j7e3doXXpUrfPQkNDMRgM3xq1XlZWRmRkZCfVquv55lz/UD9ERkZSXl7eZr/L5aK6ulr66kdYuHAh69atY/v27cTGxrZuj4yMxOFwUFtb26b8v/fFd/XVN/vEuTGbzfTs2ZPhw4ezdOlSBg8ezB//+Efpiw6Unp5OeXk5w4YNw2g0YjQa2bFjB8uWLcNoNBIRESF90YmsViu9e/fm5MmTHf73okuFIrPZzPDhw9m6dWvrNk3T2Lp1K6mpqZ1Ys66le/fuREZGtukHm83Gnj17WvshNTWV2tpa0tPTW8ts27YNTdNISUnp8DpfrJRSLFy4kLVr17Jt2za6d+/eZv/w4cMxmUxt+iI7O5v8/Pw2fXHkyJE2IXXz5s0EBATQv3//jmnIJUzTNOx2u/RFB0pLS+PIkSNkZGS0vpKSkpg1a1brn6UvOk9DQwOnTp0iKiqq4/9enPMw8Yvc6tWrlcViUW+++aY6duyYWrBggbJarW1GrYv/Xn19vTp48KA6ePCgAtSLL76oDh48qM6cOaOU8jySb7Va1UcffaQOHz6srrvuuu98JH/o0KFqz5496vPPP1e9evWSR/LP0d13360CAwPVZ5991uZx16amptYyd911l4qPj1fbtm1T+/fvV6mpqSo1NbV1/zePu06YMEFlZGSojRs3qrCwMHn0+EdYvHix2rFjh8rNzVWHDx9WixcvVjqdTm3atEkpJX3Rmf716TOlpC860qJFi9Rnn32mcnNz1RdffKHGjx+vQkNDVXl5uVKqY/uiy4UipZR6+eWXVXx8vDKbzSo5OVl99dVXnV2lS8727dsV8K3X7NmzlVKex/Iff/xxFRERoSwWi0pLS1PZ2dltjlFVVaVuvfVW5efnpwICAtTcuXNVfX19J7Tm4vVdfQCoN954o7VMc3Ozuueee1RQUJDy8fFRN9xwgyopKWlznLy8PDV58mTl7e2tQkND1aJFi5TT6ezg1lz87rzzTtWtWzdlNptVWFiYSktLaw1ESklfdKZ/D0XSFx3nlltuUVFRUcpsNquYmBh1yy23qJMnT7bu78i+0Cml1I++xiWEEEIIcYnoUmOKhBBCCCG+j4QiIYQQQggkFAkhhBBCABKKhBBCCCEACUVCCCGEEICEIiGEEEIIQEKREEIIIQQgoUgIIYQQApBQJIQQQggBSCgSQgghhAAkFAkhhBBCABKKhBBCCCEA+D9UoWcFWmNGFwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "n_samples = 10\n",
    "length = 500\n",
    "_a = []\n",
    "for i in range(n_samples):\n",
    "    a = np.arange(-4000, 4000, 10)\n",
    "    mask = np.random.rand(len(a)) > .5\n",
    "    a = a[mask]\n",
    "    a = np.concatenate([a, np.array([np.nan] * (length - len(a)))])\n",
    "    _a.append(a.reshape(-1,1))\n",
    "a = np.concatenate(_a, -1).transpose(1,0)\n",
    "lin = encode_positions(a, linear=True)\n",
    "test_eq(a.shape, (n_samples, length))\n",
    "test_eq(lin.shape, (n_samples, length))\n",
    "plt.plot(lin.T)\n",
    "plt.xlim(0, 500)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def sort_generator(generator, bs):\n",
    "    g = list(generator)\n",
    "    for i in range(len(g)//bs + 1): g[bs*i:bs*(i+1)] = np.sort(g[bs*i:bs*(i+1)])\n",
    "    return (i for i in g)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "generator = (i for i in np.random.permutation(np.arange(1000000)).tolist())\n",
    "l = list(sort_generator(generator, 512))\n",
    "test_eq(l[:512], sorted(l[:512]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def get_subset_dict(d, keys):\n",
    "    return dict((k,d[k]) for k in listify(keys) if k in d)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "keys = string.ascii_lowercase\n",
    "values = np.arange(len(keys))\n",
    "d = {k:v for k,v in zip(keys,values)}\n",
    "test_eq(get_subset_dict(d, ['a', 'k', 'j', 'e']), {'a': 0, 'k': 10, 'j': 9, 'e': 4})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def create_dir(directory, verbose=True):\n",
    "    if not is_listy(directory): directory = [directory]\n",
    "    for d in directory:\n",
    "        d = Path(d)\n",
    "        if d.exists():\n",
    "            if verbose: print(f\"{d} directory already exists.\")\n",
    "        else:\n",
    "            d.mkdir(parents=True, exist_ok=True)\n",
    "            assert d.exists(),  f\"a problem has occurred while creating {d}\"\n",
    "            if verbose: print(f\"{d} directory created.\")\n",
    "\n",
    "\n",
    "def remove_dir(directory, verbose=True):\n",
    "    import shutil\n",
    "    if not is_listy(directory): directory = [directory]\n",
    "    for d in directory:\n",
    "        d = Path(d)\n",
    "        if d.is_file(): d = d.parent\n",
    "        if not d.exists():\n",
    "            if verbose: print(f\"{d} directory doesn't exist.\")\n",
    "        else:\n",
    "            shutil.rmtree(d)\n",
    "            assert not d.exists(), f\"a problem has occurred while deleting {d}\"\n",
    "            if verbose: print(f\"{d} directory removed.\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "wandb3/wandb2/wandb directory created.\n",
      "wandb3/wandb2/wandb directory removed.\n",
      "wandb3/wandb2 directory removed.\n",
      "wandb directory doesn't exist.\n",
      "wandb3 directory removed.\n"
     ]
    }
   ],
   "source": [
    "path = \"wandb3/wandb2/wandb\"\n",
    "create_dir(path)\n",
    "assert Path(path).exists()\n",
    "\n",
    "paths = [\"wandb3/wandb2/wandb\", \"wandb3/wandb2\", \"wandb\"]\n",
    "remove_dir(paths)\n",
    "for p in paths:\n",
    "    assert not Path(p).exists()\n",
    "\n",
    "path = \"wandb3\"\n",
    "assert Path(path).exists()\n",
    "remove_dir(path)\n",
    "assert not Path(path).exists()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "test directory created.\n"
     ]
    }
   ],
   "source": [
    "create_dir('./test')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Writing ./test/mod_dev.py\n"
     ]
    }
   ],
   "source": [
    "%%file ./test/mod_dev.py\n",
    "a = 5\n",
    "def fn(b): return a + b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "test directory removed.\n"
     ]
    }
   ],
   "source": [
    "fname = \"./test/mod_dev.py\"\n",
    "while True:\n",
    "    if fname[0] in \"/ .\": fname = fname.split(fname[0], 1)[1]\n",
    "    else: break\n",
    "if '/' in fname and fname.rsplit('/', 1)[0] not in sys.path: sys.path.append(fname.rsplit('/', 1)[0])\n",
    "mod = import_file_as_module(fname)\n",
    "test_eq(mod.fn(3), 8)\n",
    "sys.path = sys.path[:-1]\n",
    "remove_dir('./test/')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "class named_partial(object):\n",
    "    \"\"\"Create a partial function with a __name__\"\"\"\n",
    "\n",
    "    def __init__(self, name, func, *args, **kwargs):\n",
    "        self._func = partial(func, *args, **kwargs)\n",
    "        self.__name__ = name\n",
    "    def __call__(self, *args, **kwargs):\n",
    "        return self._func(*args, **kwargs)\n",
    "    def __repr__(self):\n",
    "        return self.__name__"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def add_1(x, add=1): return x+add\n",
    "test_eq(add_1(1), 2)\n",
    "add_2 = partial(add_1, add=2)\n",
    "test_eq(add_2(2), 4)\n",
    "test_ne(str(add_2), \"add_2\")\n",
    "add_2 = named_partial('add_2', add_1, add=2)\n",
    "test_eq(add_2(2), 4)\n",
    "test_eq(str(add_2), \"add_2\")\n",
    "\n",
    "class _A():\n",
    "    def __init__(self, add=1): self.add = add\n",
    "    def __call__(self, x): return x + self.add\n",
    "\n",
    "test_eq(_A()(1), 2)\n",
    "_A2 = partial(_A, add=2)\n",
    "test_eq(_A2()(1), 3)\n",
    "test_ne(str(_A2), '_A2')\n",
    "_A2 = named_partial('_A2', _A, add=2)\n",
    "test_eq(_A2()(1), 3)\n",
    "test_eq(str(_A2), '_A2')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def attrdict2dict(\n",
    "    d: dict,  # a dict\n",
    "):\n",
    "    \"Converts a (nested) AttrDict dict to a dict.\"\n",
    "    d = dict(d)\n",
    "    for k, v in d.items():\n",
    "        if isinstance(v, dict):\n",
    "            d[k] = attrdict2dict(d[k])\n",
    "        elif is_listy(v):\n",
    "            d[k] = list(v)  # convert L to list\n",
    "    return d\n",
    "\n",
    "\n",
    "def dict2attrdict(\n",
    "    d: dict,  # a dict\n",
    "):\n",
    "    \"Converts a (nested) dict to an AttrDict.\"\n",
    "    d = dict(d)\n",
    "    for k, v in d.items():\n",
    "        if isinstance(v, dict):\n",
    "            d[k] = dict2attrdict(d[k])\n",
    "        elif is_listy(v):\n",
    "            d[k] = list(v)  # convert L to list\n",
    "    return AttrDict(d)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Test attrdict2dict\n",
    "d = AttrDict({'a': 1, 'b': AttrDict({'c': 2, 'd': 3})})\n",
    "test_eq(attrdict2dict(d), {'a': 1, 'b': {'c': 2, 'd': 3}})\n",
    "# Test dict2attrdict\n",
    "d = {'a': 1, 'b': {'c': 2, 'd': 3}}\n",
    "test_eq(dict2attrdict(d), AttrDict({'a': 1, 'b': AttrDict({'c': 2, 'd': 3})}))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def dict2yaml(\n",
    "    d, # a dict\n",
    "    file_path, # a path to a yaml file\n",
    "    sort_keys=False, # if True, sort the keys\n",
    "):\n",
    "    \"Converts a dict to a yaml file.\"\n",
    "    file_path = Path(file_path)\n",
    "    if not file_path.suffix == '.yaml':\n",
    "        file_path = file_path.with_suffix(\".yaml\")\n",
    "    file_path.parent.mkdir(parents=True, exist_ok=True)\n",
    "    with open(file_path, \"w\") as outfile:\n",
    "        yaml.dump(d, outfile, default_flow_style=False, sort_keys=sort_keys)\n",
    "\n",
    "\n",
    "def yaml2dict(\n",
    "    file_path, # a path to a yaml file\n",
    "    attrdict=True, # if True, convert output to AttrDict\n",
    "):\n",
    "    \"Converts a yaml file to a dict (optionally AttrDict).\"\n",
    "    file_path = Path(file_path)\n",
    "    if not file_path.suffix == '.yaml':\n",
    "        file_path = file_path.with_suffix(\".yaml\")\n",
    "    with open(file_path, \"r\") as infile:\n",
    "        d = yaml.load(infile, Loader=yaml.FullLoader)\n",
    "    if not d:  # if file is empty\n",
    "        return {}\n",
    "    return dict2attrdict(d) if attrdict else d\n",
    "\n",
    "\n",
    "def get_config(file_path):\n",
    "    \"Gets a config from a yaml file.\"\n",
    "    file_path = Path(file_path)\n",
    "    if not file_path.suffix == \".yaml\":\n",
    "        file_path = file_path.with_suffix(\".yaml\")\n",
    "    cfg = yaml2dict(file_path)\n",
    "    config = cfg.get(\"config\") or cfg\n",
    "    config = dict2attrdict(config)\n",
    "    return config"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Writing sweep_config.yaml\n"
     ]
    }
   ],
   "source": [
    "%%file sweep_config.yaml\n",
    "\n",
    "program: wandb_scripts/train_script.py          # (required) Path to training script.\n",
    "method: bayes                                   # (required) Specify the search strategy: grid, random or bayes\n",
    "parameters:                                     # (required) Specify parameters bounds to search.\n",
    "   bs:\n",
    "      values: [32, 64, 128]\n",
    "   depth:\n",
    "      values: [3, 6, 9, 12]\n",
    "   fc_dropout:\n",
    "      distribution: uniform\n",
    "      min: 0.\n",
    "      max: 0.5\n",
    "   lr_max:\n",
    "      values: [0.001, 0.003, 0.01, 0.03, 0.1]\n",
    "   n_epoch:\n",
    "      values: [10, 15, 20]\n",
    "   nb_filters:\n",
    "      values: [32, 64, 128]\n",
    "name: LSST_sweep_01\n",
    "metric:\n",
    "   name: accuracy                              # This must match one of the metrics in the training script\n",
    "   goal: maximize\n",
    "early_terminate:\n",
    "   type: hyperband\n",
    "   min_iter: 3\n",
    "project: LSST_wandb_hpo"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'program': 'wandb_scripts/train_script.py', 'method': 'bayes', 'parameters': {'bs': {'values': [32, 64, 128]}, 'depth': {'values': [3, 6, 9, 12]}, 'fc_dropout': {'distribution': 'uniform', 'min': 0.0, 'max': 0.5}, 'lr_max': {'values': [0.001, 0.003, 0.01, 0.03, 0.1]}, 'n_epoch': {'values': [10, 15, 20]}, 'nb_filters': {'values': [32, 64, 128]}}, 'name': 'LSST_sweep_01', 'metric': {'name': 'accuracy', 'goal': 'maximize'}, 'early_terminate': {'type': 'hyperband', 'min_iter': 3}, 'project': 'LSST_wandb_hpo'}\n"
     ]
    }
   ],
   "source": [
    "fname = \"sweep_config.yaml\"\n",
    "sweep_config = yaml2dict(fname)\n",
    "print(sweep_config)\n",
    "test_eq(sweep_config.method, 'bayes')\n",
    "test_eq(sweep_config['metric'], {'name': 'accuracy', 'goal': 'maximize'})\n",
    "os.remove(fname)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def str2list(o):\n",
    "    if o is None: return []\n",
    "    elif o is not None and not isinstance(o, (list, L)):\n",
    "        if isinstance(o, pd.core.indexes.base.Index): o = o.tolist()\n",
    "        else: o = [o]\n",
    "    return o\n",
    "\n",
    "def str2index(o):\n",
    "    if o is None: return o\n",
    "    o = str2list(o)\n",
    "    if len(o) == 1: return o[0]\n",
    "    return o\n",
    "\n",
    "def get_cont_cols(df):\n",
    "    return df._get_numeric_data().columns.tolist()\n",
    "\n",
    "def get_cat_cols(df):\n",
    "    cols = df.columns.tolist()\n",
    "    cont_cols = df._get_numeric_data().columns.tolist()\n",
    "    return [col for col in cols if col not in cont_cols]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "alphabet = L(list(string.ascii_lowercase))\n",
    "ALPHABET = L(list(string.ascii_uppercase))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def get_mapping(arr, dim=1, return_counts=False):\n",
    "    maps = [L(np.unique(np.take(arr, i, dim)).tolist()) for i in range(arr.shape[dim])]\n",
    "    if return_counts:\n",
    "        counts = [len(m) for m in maps]\n",
    "        return maps, counts\n",
    "    return maps\n",
    "\n",
    "def map_array(arr, dim=1):\n",
    "    out = stack([np.unique(np.take(arr, i, dim), return_inverse=True)[1] for i in range(arr.shape[dim])])\n",
    "    if dim == 1: out = out.T\n",
    "    return out"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([['d', 'k', 'l', 'I', 'I', 'G'],\n",
       "        ['g', 'i', 'l', 'I', 'J', 'I'],\n",
       "        ['e', 'l', 'n', 'G', 'H', 'I'],\n",
       "        ['e', 'l', 'a', 'I', 'H', 'G'],\n",
       "        ['k', 'l', 'b', 'I', 'I', 'J'],\n",
       "        ['c', 'f', 'k', 'I', 'H', 'I'],\n",
       "        ['e', 'j', 'f', 'I', 'H', 'J'],\n",
       "        ['n', 'd', 'g', 'G', 'J', 'J'],\n",
       "        ['d', 'f', 'a', 'I', 'H', 'H'],\n",
       "        ['i', 'c', 'm', 'J', 'G', 'G']], dtype='<U1'),\n",
       " [(#7) ['c','d','e','g','i','k','n'],\n",
       "  (#7) ['c','d','f','i','j','k','l'],\n",
       "  (#8) ['a','b','f','g','k','l','m','n'],\n",
       "  (#3) ['G','I','J'],\n",
       "  (#4) ['G','H','I','J'],\n",
       "  (#4) ['G','H','I','J']],\n",
       " [7, 7, 8, 3, 4, 4])"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.asarray(alphabet[np.random.randint(0,15,30)]).reshape(10,3)\n",
    "b = np.asarray(ALPHABET[np.random.randint(6,10,30)]).reshape(10,3)\n",
    "x = concat(a,b,dim=1)\n",
    "maps, counts = get_mapping(x, dim=1, return_counts=True)\n",
    "x, maps, counts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([['i', 'm', 'd'],\n",
       "        ['h', 'm', 'g'],\n",
       "        ['i', 'g', 'd'],\n",
       "        ['k', 'm', 'n'],\n",
       "        ['n', 'j', 'l'],\n",
       "        ['n', 'l', 'i'],\n",
       "        ['f', 'c', 'k'],\n",
       "        ['i', 'm', 'a'],\n",
       "        ['l', 'i', 'f'],\n",
       "        ['k', 'o', 'g']], dtype='<U1'),\n",
       " array([[2, 5, 1],\n",
       "        [1, 5, 3],\n",
       "        [2, 1, 1],\n",
       "        [3, 5, 7],\n",
       "        [5, 3, 6],\n",
       "        [5, 4, 4],\n",
       "        [0, 0, 5],\n",
       "        [2, 5, 0],\n",
       "        [4, 2, 2],\n",
       "        [3, 6, 3]]),\n",
       " array([[2, 5, 1],\n",
       "        [1, 5, 3],\n",
       "        [2, 1, 1],\n",
       "        [3, 5, 7],\n",
       "        [5, 3, 6],\n",
       "        [5, 4, 4],\n",
       "        [0, 0, 5],\n",
       "        [2, 5, 0],\n",
       "        [4, 2, 2],\n",
       "        [3, 6, 3]]))"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = np.asarray(alphabet[np.random.randint(0,15,30)]).reshape(10,3)\n",
    "x, map_array(x), map_array(x, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def log_tfm(o, inplace=False):\n",
    "    \"Log transforms an array-like object with positive and/or negative values\"\n",
    "    if isinstance(o, torch.Tensor):\n",
    "        pos_o = torch.log1p(o[o > 0])\n",
    "        neg_o = -torch.log1p(torch.abs(o[o < 0]))\n",
    "    else:\n",
    "        pos_o = np.log1p(o[o > 0])\n",
    "        neg_o = -np.log1p(np.abs(o[o < 0]))\n",
    "    if inplace:\n",
    "        o[o > 0] = pos_o\n",
    "        o[o < 0] = neg_o\n",
    "        return o\n",
    "    else:\n",
    "        if hasattr(o, \"clone\"): output = o.clone()\n",
    "        elif hasattr(o, \"copy\"): output = o.copy()\n",
    "        output[output > 0] = pos_o\n",
    "        output[output < 0] = neg_o\n",
    "        return output"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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ogU8iDz++ONavny57r77bl166aX67//+byUmJupXv/pVoHcNIIR5rCBic0MA2Cqgl4Cenh5t27ZNS5YsObnD6GgtWbJEmzZtGrS92+1Wa2ur3wvA2GTNEYkmiQCRLKBXgMbGRvX392vixIl+yydOnKi6urpB269du1apqanWKycnJ5DNA2AjJqsCkELsrpnVq1erpaXFelVXV9vdJAABwmRVAJIUG8gvdzqdiomJUX19vd/y+vp6TZo0adD2DodDDocjkE0CECL6mawKQAHuEYmLi9OcOXP09ttvW8s8Ho/efvttzZ8/P5C7BhDiCCIApAD3iEjSypUrddddd2nu3LmaN2+e/u3f/k0dHR26++67A71rACGMIAJACkIQuf3229XQ0KDvf//7qqur06xZs/TGG28MmsAKILIwWRWAFIQgIkn333+/7r///mDsCkCYYLIqACnE7poBEDkYmgEgEUQA2IQgAkAiiACwiYcgAkAEEQA2GXjoXSxBBIhoBBEAthiYrBpNEAEiGkEEgC24fReARBABYBMmqwKQCCIAbDAwUVUiiACRjiACIOj6CCIAfAgiAILOYwgiALwIIgCCrrffY/03t+8CkY0gAiDoOtz9kry9IY5YLkNAJOMKACDoOnr6JEnj42IUxe27QEQjiAAIug63N4gkOYLyAHAAIYwgAiDoBoZmEgkiQMQjiAAIuoEekfEEESDiEUQABN2pc0QARDaCCICgGxiaoUcEAEEEQNBZQzP0iAARjyACIOisoRl6RICIRxABEHRMVgUwgCACIOg6enxzROIIIkCkI4gACLqTPSLMEQEiHUEEQNBx1wyAAQQRAEE30COSyF0zQMQjiAAIuoG7ZnjWDACCCICg464ZAAMIIgCCzpojwl0zQMQjiAAIupMFzZgjAkQ6ggiAoDLGMDQDwEIQARBU7j6PPMb73wQRAAQRAEHV7usNkaTEcQzNAJGOIAIgqDp9E1UT42IUHR1lc2sA2I0gAiCo2q1iZgzLACCIAAiyTquYGcMyAAgiAIKMHhEApyKIAAiqgWJmlHcHIBFEAATZQDGzRIZmACiAQeTgwYO65557lJeXp4SEBBUUFGjNmjXq6ekJ1C4BhAGKmQE4VcCuBHv27JHH49FTTz2lwsJC7dq1S8uXL1dHR4cee+yxQO0WQIjr7PENzTBHBIACGESuv/56XX/9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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "arr = np.asarray([-1000, -100, -10, -1, 0, 1, 10, 100, 1000]).astype(float)\n",
    "plt.plot(arr, log_tfm(arr, False))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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ogU8iDz++ONavny57r77bl166aX67//+byUmJupXv/pVoHcNIIR5rCBic0MA2Cqgl4Cenh5t27ZNS5YsObnD6GgtWbJEmzZtGrS92+1Wa2ur3wvA2GTNEYkmiQCRLKBXgMbGRvX392vixIl+yydOnKi6urpB269du1apqanWKycnJ5DNA2AjJqsCkELsrpnVq1erpaXFelVXV9vdJAABwmRVAJIUG8gvdzqdiomJUX19vd/y+vp6TZo0adD2DodDDocjkE0CECL6mawKQAHuEYmLi9OcOXP09ttvW8s8Ho/efvttzZ8/P5C7BhDiCCIApAD3iEjSypUrddddd2nu3LmaN2+e/u3f/k0dHR26++67A71rACGMIAJACkIQuf3229XQ0KDvf//7qqur06xZs/TGG28MmsAKILIwWRWAFIQgIkn333+/7r///mDsCkCYYLIqACnE7poBEDkYmgEgEUQA2IQgAkAiiACwiYcgAkAEEQA2GXjoXSxBBIhoBBEAthiYrBpNEAEiGkEEgC24fReARBABYBMmqwKQCCIAbDAwUVUiiACRjiACIOj6CCIAfAgiAILOYwgiALwIIgCCrrffY/03t+8CkY0gAiDoOtz9kry9IY5YLkNAJOMKACDoOnr6JEnj42IUxe27QEQjiAAIug63N4gkOYLyAHAAIYwgAiDoBoZmEgkiQMQjiAAIuoEekfEEESDiEUQABN2pc0QARDaCCICgGxiaoUcEAEEEQNBZQzP0iAARjyACIOisoRl6RICIRxABEHRMVgUwgCACIOg6enxzROIIIkCkI4gACLqTPSLMEQEiHUEEQNBx1wyAAQQRAEE30COSyF0zQMQjiAAIuoG7ZnjWDACCCICg464ZAAMIIgCCzpojwl0zQMQjiAAIupMFzZgjAkQ6ggiAoDLGMDQDwEIQARBU7j6PPMb73wQRAAQRAEHV7usNkaTEcQzNAJGOIAIgqDp9E1UT42IUHR1lc2sA2I0gAiCo2q1iZgzLACCIAAiyTquYGcMyAAgiAIKMHhEApyKIAAiqgWJmlHcHIBFEAATZQDGzRIZmACiAQeTgwYO65557lJeXp4SEBBUUFGjNmjXq6ekJ1C4BhAGKmQE4VcCuBHv27JHH49FTTz2lwsJC7dq1S8uXL1dHR4cee+yxQO0WQIjr7PENzTBHBIACGESuv/56XX/9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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "t = tensor([-1000, -100, -10, -1, 0, 1, 10, 100, 1000]).float()\n",
    "plt.plot(t, log_tfm(t, False))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def to_sincos_time(arr, max_value):\n",
    "    sin = np.sin(arr / max_value * 2 * np.pi)\n",
    "    cos = np.cos(arr / max_value * 2 * np.pi)\n",
    "    return sin, cos"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "arr = np.sort(np.random.rand(100) * 5)\n",
    "arr_sin, arr_cos = to_sincos_time(arr, 5)\n",
    "plt.scatter(arr, arr_sin)\n",
    "plt.scatter(arr, arr_cos)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def plot_feature_dist(X, percentiles=[0,0.1,0.5,1,5,10,25,50,75,90,95,99,99.5,99.9,100]):\n",
    "    for i in range(X.shape[1]):\n",
    "        ys = []\n",
    "        for p in percentiles:\n",
    "            ys.append(np.percentile(X[:, i].flatten(), p))\n",
    "        plt.plot(percentiles, ys)\n",
    "        plt.xticks(percentiles, rotation='vertical')\n",
    "        plt.grid(color='gainsboro', linewidth=.5)\n",
    "        plt.title(f\"var_{i}\")\n",
    "        plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "arr = np.random.rand(10, 3, 100)\n",
    "plot_feature_dist(arr, percentiles=[0,0.1,0.5,1,5,10,25,50,75,90,95,99,99.5,99.9,100])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def rolling_moving_average(o, window=2):\n",
    "    if isinstance(o, torch.Tensor):\n",
    "        cunsum = torch.cumsum(o, axis=-1) # nancumsum not available (can't be used with missing data!)\n",
    "        lag_cunsum = torch.cat([torch.zeros((o.shape[0], o.shape[1], window), device=o.device), torch.cumsum(o[..., :-window], axis=-1)], -1)\n",
    "        count = torch.clip(torch.ones_like(o).cumsum(-1), max=window)\n",
    "        return (cunsum - lag_cunsum) / count\n",
    "    else:\n",
    "        cunsum = np.nancumsum(o, axis=-1)\n",
    "        lag_cunsum = np.concatenate([np.zeros((o.shape[0], o.shape[1], window)), np.nancumsum(o[..., :-window], axis=-1)], -1)\n",
    "        count = np.minimum(np.ones_like(o).cumsum(-1), window)\n",
    "        return (cunsum - lag_cunsum) / count"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[[ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.],\n",
      "         [10., 11., 12., 13., 14., 15., 16., 17., 18., 19.],\n",
      "         [20., 21., 22., 23., 24., 25., 26., 27., 28., 29.]],\n",
      "\n",
      "        [[30., 31., 32., 33., 34., 35., 36., 37., 38., 39.],\n",
      "         [40., 41., 42., 43., 44., 45., 46., 47., 48., 49.],\n",
      "         [50., 51., 52., 53., 54., 55., 56., 57., 58., 59.]]])\n",
      "tensor([[[ 0.0000,  0.5000,  1.0000,  2.0000,  3.0000,  4.0000,  5.0000,\n",
      "           6.0000,  7.0000,  8.0000],\n",
      "         [10.0000, 10.5000, 11.0000, 12.0000, 13.0000, 14.0000, 15.0000,\n",
      "          16.0000, 17.0000, 18.0000],\n",
      "         [20.0000, 20.5000, 21.0000, 22.0000, 23.0000, 24.0000, 25.0000,\n",
      "          26.0000, 27.0000, 28.0000]],\n",
      "\n",
      "        [[30.0000, 30.5000, 31.0000, 32.0000, 33.0000, 34.0000, 35.0000,\n",
      "          36.0000, 37.0000, 38.0000],\n",
      "         [40.0000, 40.5000, 41.0000, 42.0000, 43.0000, 44.0000, 45.0000,\n",
      "          46.0000, 47.0000, 48.0000],\n",
      "         [50.0000, 50.5000, 51.0000, 52.0000, 53.0000, 54.0000, 55.0000,\n",
      "          56.0000, 57.0000, 58.0000]]])\n"
     ]
    }
   ],
   "source": [
    "a = np.arange(60).reshape(2,3,10).astype(float)\n",
    "t = torch.arange(60).reshape(2,3,10).float()\n",
    "test_close(rolling_moving_average(a, window=3), rolling_moving_average(t, window=3).numpy())\n",
    "print(t)\n",
    "print(rolling_moving_average(t, window=3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def ffill_sequence(o):\n",
    "    \"\"\"Forward fills an array-like object alongside sequence dimension\"\"\"\n",
    "    if isinstance(o, torch.Tensor):\n",
    "        mask = torch.isnan(o)\n",
    "        idx = torch.where(~mask, torch.arange(mask.shape[-1], device=o.device), 0)\n",
    "        idx = torch.cummax(idx, dim=-1).values\n",
    "        return o[torch.arange(o.shape[0], device=o.device)[:,None,None], torch.arange(o.shape[1], device=o.device)[None,:,None], idx]\n",
    "    else:\n",
    "        mask = np.isnan(o)\n",
    "        idx = np.where(~mask, np.arange(mask.shape[-1]), 0)\n",
    "        idx = np.maximum.accumulate(idx, axis=-1)\n",
    "        return o[np.arange(o.shape[0])[:,None,None], np.arange(o.shape[1])[None,:,None], idx]\n",
    "\n",
    "def bfill_sequence(o):\n",
    "    \"\"\"Backward fills an array-like object alongside sequence dimension\"\"\"\n",
    "    if isinstance(o, torch.Tensor):\n",
    "        o = torch.flip(o, (-1,))\n",
    "        o = ffill_sequence(o)\n",
    "        return torch.flip(o, (-1,))\n",
    "    else:\n",
    "        o = o[..., ::-1]\n",
    "        o = ffill_sequence(o)\n",
    "        return o[..., ::-1]\n",
    "\n",
    "def fbfill_sequence(o):\n",
    "    \"\"\"Forward and backward fills an array-like object alongside sequence dimension\"\"\"\n",
    "    o = ffill_sequence(o)\n",
    "    o = bfill_sequence(o)\n",
    "    return o"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[[ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8., nan],\n",
       "         [10., 11., nan, nan, 14., 15., nan, 17., nan, 19.],\n",
       "         [20., 21., 22., 23., nan, 25., 26., 27., 28., 29.],\n",
       "         [30., 31., 32., 33., nan, 35., 36., 37., 38., 39.]],\n",
       "\n",
       "        [[40., 41., 42., 43., 44., 45., 46., 47., nan, 49.],\n",
       "         [nan, 51., nan, 53., 54., 55., nan, 57., 58., 59.],\n",
       "         [60., 61., 62., 63., 64., nan, nan, 67., 68., 69.],\n",
       "         [70., nan, 72., 73., 74., 75., 76., nan, 78., 79.]]],\n",
       "       dtype=torch.float64)"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.arange(80).reshape(2, 4, 10).astype(float)\n",
    "mask = np.random.rand(*a.shape)\n",
    "a[mask > .8] = np.nan\n",
    "t = torch.from_numpy(a)\n",
    "t"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[[ 0.  1.  2.  3.  4.  5.  6.  7.  8.  8.]\n",
      "  [10. 11. 11. 11. 14. 15. 15. 17. 17. 19.]\n",
      "  [20. 21. 22. 23. 23. 25. 26. 27. 28. 29.]\n",
      "  [30. 31. 32. 33. 33. 35. 36. 37. 38. 39.]]\n",
      "\n",
      " [[40. 41. 42. 43. 44. 45. 46. 47. 47. 49.]\n",
      "  [nan 51. 51. 53. 54. 55. 55. 57. 58. 59.]\n",
      "  [60. 61. 62. 63. 64. 64. 64. 67. 68. 69.]\n",
      "  [70. 70. 72. 73. 74. 75. 76. 76. 78. 79.]]]\n"
     ]
    }
   ],
   "source": [
    "# forward fill\n",
    "filled_a = ffill_sequence(a)\n",
    "print(filled_a)\n",
    "m = np.isnan(filled_a)\n",
    "test_eq(filled_a[~m], ffill_sequence(t).numpy()[~m])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[[ 0.  1.  2.  3.  4.  5.  6.  7.  8. nan]\n",
      "  [10. 11. 14. 14. 14. 15. 17. 17. 19. 19.]\n",
      "  [20. 21. 22. 23. 25. 25. 26. 27. 28. 29.]\n",
      "  [30. 31. 32. 33. 35. 35. 36. 37. 38. 39.]]\n",
      "\n",
      " [[40. 41. 42. 43. 44. 45. 46. 47. 49. 49.]\n",
      "  [51. 51. 53. 53. 54. 55. 57. 57. 58. 59.]\n",
      "  [60. 61. 62. 63. 64. 67. 67. 67. 68. 69.]\n",
      "  [70. 72. 72. 73. 74. 75. 76. 78. 78. 79.]]]\n"
     ]
    }
   ],
   "source": [
    "# backward fill\n",
    "filled_a = bfill_sequence(a)\n",
    "print(filled_a)\n",
    "m = np.isnan(filled_a)\n",
    "test_eq(filled_a[~m], bfill_sequence(t).numpy()[~m])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[[ 0.  1.  2.  3.  4.  5.  6.  7.  8.  8.]\n",
      "  [10. 11. 11. 11. 14. 15. 15. 17. 17. 19.]\n",
      "  [20. 21. 22. 23. 23. 25. 26. 27. 28. 29.]\n",
      "  [30. 31. 32. 33. 33. 35. 36. 37. 38. 39.]]\n",
      "\n",
      " [[40. 41. 42. 43. 44. 45. 46. 47. 47. 49.]\n",
      "  [51. 51. 51. 53. 54. 55. 55. 57. 58. 59.]\n",
      "  [60. 61. 62. 63. 64. 64. 64. 67. 68. 69.]\n",
      "  [70. 70. 72. 73. 74. 75. 76. 76. 78. 79.]]]\n"
     ]
    }
   ],
   "source": [
    "# forward & backward fill\n",
    "filled_a = fbfill_sequence(a)\n",
    "print(filled_a)\n",
    "m = np.isnan(filled_a)\n",
    "test_eq(filled_a[~m], fbfill_sequence(t).numpy()[~m])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def dummify(o:Union[np.ndarray, torch.Tensor], by_var:bool=True, inplace:bool=False, skip:Optional[list]=None, random_state=None):\n",
    "    \"\"\"Shuffles an array-like object along all dimensions or dimension 1 (variables) if by_var is True.\"\"\"\n",
    "    if not inplace:\n",
    "        if isinstance(o, np.ndarray): o_dummy = o.copy()\n",
    "        elif isinstance(o, torch.Tensor): o_dummy = o.clone()\n",
    "    else: o_dummy = o\n",
    "    if by_var:\n",
    "        for k in progress_bar(range(o.shape[1]), leave=False):\n",
    "            if skip is not None and k in listify(skip): continue\n",
    "            o_dummy[:, k] = random_shuffle(o[:, k].flatten(), random_state=random_state).reshape(o[:, k].shape)\n",
    "    else:\n",
    "        o_dummy[:] = random_shuffle(o.flatten(), random_state=random_state).reshape(o.shape)\n",
    "    if not inplace:\n",
    "        return o_dummy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "<style>\n",
       "    /* Turns off some styling */\n",
       "    progress {\n",
       "        /* gets rid of default border in Firefox and Opera. */\n",
       "        border: none;\n",
       "        /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
       "        background-size: auto;\n",
       "    }\n",
       "    progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
       "        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
       "    }\n",
       "    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
       "        background: #F44336;\n",
       "    }\n",
       "</style>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "\n",
       "<style>\n",
       "    /* Turns off some styling */\n",
       "    progress {\n",
       "        /* gets rid of default border in Firefox and Opera. */\n",
       "        border: none;\n",
       "        /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
       "        background-size: auto;\n",
       "    }\n",
       "    progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
       "        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
       "    }\n",
       "    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
       "        background: #F44336;\n",
       "    }\n",
       "</style>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "arr = np.random.rand(2,3,10)\n",
    "arr_original = arr.copy()\n",
    "dummy_arr = dummify(arr)\n",
    "test_ne(arr_original, dummy_arr)\n",
    "test_eq(arr_original, arr)\n",
    "dummify(arr, inplace=True)\n",
    "test_ne(arr_original, arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "<style>\n",
       "    /* Turns off some styling */\n",
       "    progress {\n",
       "        /* gets rid of default border in Firefox and Opera. */\n",
       "        border: none;\n",
       "        /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
       "        background-size: auto;\n",
       "    }\n",
       "    progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
       "        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
       "    }\n",
       "    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
       "        background: #F44336;\n",
       "    }\n",
       "</style>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "\n",
       "<style>\n",
       "    /* Turns off some styling */\n",
       "    progress {\n",
       "        /* gets rid of default border in Firefox and Opera. */\n",
       "        border: none;\n",
       "        /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
       "        background-size: auto;\n",
       "    }\n",
       "    progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
       "        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
       "    }\n",
       "    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
       "        background: #F44336;\n",
       "    }\n",
       "</style>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "t = torch.rand(2,3,10)\n",
    "t_original = t.clone()\n",
    "dummy_t = dummify(t)\n",
    "test_ne(t_original, dummy_t)\n",
    "test_eq(t_original, t)\n",
    "dummify(t, inplace=True)\n",
    "test_ne(t_original, t)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def shuffle_along_axis(o, axis=-1, random_state=None):\n",
    "    if isinstance(o, torch.Tensor): size = o.numel()\n",
    "    else: size = np.size(o)\n",
    "    for ax in listify(axis):\n",
    "        idx = random_shuffle(np.arange(size), random_state=random_state).reshape(*o.shape).argsort(axis=ax)\n",
    "        o = np.take_along_axis(o, idx, axis=ax)\n",
    "    return o"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = np.arange(60).reshape(2,3,10) + 10\n",
    "X_shuffled = shuffle_along_axis(X,(0, -1), random_state=23)\n",
    "test_eq(X_shuffled, np.array([[[13, 15, 41, 14, 40, 49, 18, 42, 47, 46],\n",
    "                               [28, 56, 53, 50, 52, 25, 24, 57, 51, 59],\n",
    "                               [34, 30, 38, 35, 69, 66, 63, 67, 61, 62]],\n",
    "\n",
    "                              [[19, 10, 11, 16, 43, 12, 17, 48, 45, 44],\n",
    "                               [23, 20, 26, 22, 21, 27, 58, 29, 54, 55],\n",
    "                               [36, 31, 39, 60, 33, 68, 37, 32, 65, 64]]]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def analyze_feature(feature, bins=100, density=False, feature_name=None, clip_outliers_plot=False, quantile_range=(25.0, 75.0),\n",
    "           percentiles=[1, 25, 50, 75, 99], text_len=12, figsize=(10,6)):\n",
    "    non_nan_feature = feature[~np.isnan(feature)]\n",
    "    nan_perc = np.isnan(feature).mean()\n",
    "    print(f\"{'dtype':>{text_len}}: {feature.dtype}\")\n",
    "    print(f\"{'nan values':>{text_len}}: {nan_perc:.1%}\")\n",
    "    print(f\"{'max':>{text_len}}: {np.nanmax(feature)}\")\n",
    "    for p in percentiles:\n",
    "        print(f\"{p:>{text_len}.0f}: {get_percentile(feature, p)}\")\n",
    "    print(f\"{'min':>{text_len}}: {np.nanmin(feature)}\")\n",
    "    min_outliers, max_outliers = get_outliers_IQR(feature, quantile_range=quantile_range)\n",
    "    print(f\"{'outlier min':>{text_len}}: {min_outliers}\")\n",
    "    print(f\"{'outlier max':>{text_len}}: {max_outliers}\")\n",
    "    print(f\"{'outliers':>{text_len}}: {((non_nan_feature < min_outliers) | (non_nan_feature > max_outliers)).mean():.1%}\")\n",
    "    print(f\"{'mean':>{text_len}}: {np.nanmean(feature)}\")\n",
    "    print(f\"{'std':>{text_len}}: {np.nanstd(feature)}\")\n",
    "    print(f\"{'normal dist':>{text_len}}: {normaltest(non_nan_feature, axis=0, nan_policy='propagate')[1] > .05}\")\n",
    "    plt.figure(figsize=figsize)\n",
    "    if clip_outliers_plot:\n",
    "        plt.hist(np.clip(non_nan_feature, min_outliers, max_outliers), bins, density=density, color='lime', edgecolor='black')\n",
    "    else:\n",
    "        plt.hist(non_nan_feature, bins, density=density, color='lime', edgecolor='black')\n",
    "    plt.axvline(min_outliers, lw=1, ls='--', color='red')\n",
    "    plt.axvline(max_outliers, lw=1, ls='--', color='red')\n",
    "    plt.title(f\"feature: {feature_name}\")\n",
    "    plt.show()\n",
    "\n",
    "def analyze_array(o, bins=100, density=False, feature_names=None, clip_outliers_plot=False, quantile_range=(25.0, 75.0),\n",
    "           percentiles=[1, 25, 50, 75, 99], text_len=12, figsize=(10,6)):\n",
    "    if percentiles:\n",
    "        percentiles = np.sort(percentiles)[::-1]\n",
    "    print(f\"{'array shape':>{text_len}}: {o.shape}\")\n",
    "    if o.ndim > 1:\n",
    "        for f in range(o.shape[1]):\n",
    "            feature_name = f\"{feature_names[f]}\" if feature_names is not None else f\n",
    "            print(f\"\\n{f:3} {'feature':>{text_len - 4}}: {feature_name}\\n\")\n",
    "            analyze_feature(o[:, f].flatten(), feature_name=feature_name)\n",
    "    else:\n",
    "        analyze_feature(o.flatten(), feature_name=feature_names)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " array shape: (1000,)\n",
      "       dtype: float64\n",
      "  nan values: 0.0%\n",
      "         max: 3.581094060980321\n",
      "           1: -2.1615590829115185\n",
      "          25: -0.5910961139851849\n",
      "          50: -0.002247946765973052\n",
      "          75: 0.6259274030927355\n",
      "          99: 2.3412961380708084\n",
      "         min: -2.9413736207935037\n",
      " outlier min: -2.416631389602066\n",
      " outlier max: 2.4514626787096163\n",
      "    outliers: 1.3%\n",
      "        mean: 0.0252125277963861\n",
      "         std: 0.946955486669799\n",
      " normal dist: True\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzYAAAIQCAYAAABTzfveAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABFiklEQVR4nO3de3wU9b3/8XfCJSFAwmWBcEm4G8JVQcVgK1FRwGqlRTy9rCIHtfZEKkarxp+oSFtobb30iGitBWukVG3xViutKOH0CBaDqYhrBEQXIQQGTQKhu1Cyvz/msDXJZpMNu5mZzOv5eOzj6853M/NJdtn9vJ3ZmaRQKBQSAAAAADhYstUFAAAAAMCpItgAAAAAcDyCDQAAAADHI9gAAAAAcDyCDQAAAADHI9gAAAAAcDyCDQAAAADHI9gAAAAAcDyCDQAAAADHI9gAgMNt2bJFU6ZMUdeuXZWUlKSysjKrSwIAoM0RbADAwY4fP645c+bo888/14MPPqinn35agwcPjvt29u3bp3vvvddRoWnVqlVKSkpSamqq9u7d22g+Pz9fY8eOtaAyAEAiEGwAwMF27dqlTz/9VLfeequuv/56eb1e9ezZM+7b2bdvnxYvXuyoYHNSMBjUsmXLrC4DAJBgBBsAcLADBw5Iknr06GFtIa0UCARUV1eX0G2cfvrpeuKJJ7Rv376EbgcAYC2CDQA41DXXXKOpU6dKkubMmaOkpCTl5+eH5z/88ENdccUV6tWrl1JTU3XmmWfqpZdeqreOzz//XLfeeqvGjRunbt26KT09XTNnztQ//vGP8GM2bNigs846S5I0b948JSUlKSkpSatWrZIkDRkyRNdcc02j+vLz8+vVs2HDBiUlJWnNmjW66667NHDgQKWlpammpkaS9Pbbb2vGjBnKyMhQWlqapk6dqv/93/9ttN4PP/xQfr+/xX+nO++8UydOnGjRXpt//etfWrJkiYYPH66UlBQNGTJEd955p4LBYL3HDRkyRJdeeqn+9re/6eyzz1ZqaqqGDRum3/72t43WWVVVpYULFyorK0spKSkaMWKEfvrTnyY80AGA23S0ugAAQOt873vf08CBA/WTn/xEP/jBD3TWWWepX79+kqTt27fr3HPP1cCBA3XHHXeoa9euevbZZzVr1iz94Q9/0De+8Q1J0scff6wXXnhBc+bM0dChQ1VZWanHH39cU6dO1QcffKABAwYoNzdX9913n+6++25df/31+upXvypJmjJlSqvqXrJkiTp37qxbb71VwWBQnTt31htvvKGZM2dq0qRJuueee5ScnKyVK1fqggsu0P/8z//o7LPPDv98bm6upk6dqg0bNrRoe0OHDtXVV1+tJ554QnfccYcGDBjQ5GOvvfZaPfXUU7riiit0yy236O2339bSpUvl8/m0du3aeo/duXOnrrjiCs2fP19z587Vb37zG11zzTWaNGmSxowZI0k6evSopk6dqr179+p73/uesrOz9dZbb6moqEgVFRV66KGHYv77AQCaEAIAONabb74ZkhR67rnn6i2/8MILQ+PGjQsFAoHwsrq6utCUKVNCI0eODC8LBAKhEydO1PvZ3bt3h1JSUkL33XdfeNmWLVtCkkIrV65sVMPgwYNDc+fObbR86tSpoalTpzaqddiwYaGjR4/Wq2vkyJGh6dOnh+rq6sLLjx49Gho6dGjooosuqrdeSfXW25SVK1eGJIW2bNkS2rVrV6hjx46hH/zgB/XqGzNmTPh+WVlZSFLo2muvrbeeW2+9NSQp9MYbb9T7nSWFNm7cGF524MCBUEpKSuiWW24JL1uyZEmoa9euoY8++qjeOu+4445Qhw4dQn6/v9nfAwDQMhyKBgDtzOeff6433nhDV155pQ4fPizDMGQYhg4dOqTp06drx44d4bOEpaSkKDnZ/Cg4ceKEDh06pG7duiknJ0dbt25NSH1z585Vly5dwvfLysq0Y8cOfec739GhQ4fC9dbW1urCCy/Uxo0b6x22FQqFWry35qRhw4bpqquu0q9+9StVVFREfMyrr74qSSosLKy3/JZbbpEk/elPf6q3fPTo0eG9V5LUp08f5eTk6OOPPw4ve+655/TVr35VPXv2DP9ehmFo2rRpOnHihDZu3BjT7wEAaBqHogFAO7Nz506FQiEtWrRIixYtiviYAwcOaODAgaqrq9PDDz+sRx99VLt379aJEyfCj+ndu3dC6hs6dGi9+zt27JBkBp6mVFdXn/LZ3u666y49/fTTWrZsmR5++OFG859++qmSk5M1YsSIesszMzPVo0cPffrpp/WWZ2dnN1pHz5499cUXX4Tv79ixQ++995769OkTsaaTJ38AAJw6gg0AtDMn927ceuutmj59esTHnGzef/KTn2jRokX6z//8Ty1Z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",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.random.normal(size=(1000))\n",
    "analyze_array(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " array shape: (1000, 2)\n",
      "\n",
      "  0  feature: 0\n",
      "\n",
      "       dtype: float64\n",
      "  nan values: 0.0%\n",
      "         max: 20.323075761234193\n",
      "           1: -8.260661592413742\n",
      "          25: -0.6268118569038604\n",
      "          50: 2.7491159998190335\n",
      "          75: 6.1659732833324234\n",
      "          99: 15.387037197243288\n",
      "         min: -13.122296090020368\n",
      " outlier min: -10.815989567258287\n",
      " outlier max: 16.35515099368685\n",
      "    outliers: 0.9%\n",
      "        mean: 2.9347218553275445\n",
      "         std: 5.134940196769919\n",
      " normal dist: True\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzYAAAIQCAYAAABTzfveAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABEEklEQVR4nO3dfXhU5Z3/8U9CyYQACYQBwtPwbBwEVFBjfESlQtq1PlC01rHgolYbbQH9adNLUGwVV7dqu0Xtri5YI7Xirra6qLUI2K6BapAqOo1AsYMSggebBIIzUDK/P846JWESmDCTk3Of9+u65rrNuU/mfJNhMt+P58w9WfF4PC4AAAAAcLFspwsAAAAAgGNFsAEAAADgegQbAAAAAK5HsAEAAADgegQbAAAAAK5HsAEAAADgegQbAAAAAK5HsAEAAADgegQbAAAAAK5HsAEAj3vrrbd0xhlnqGfPnsrKytLGjRudLgkAgJQRbADAww4cOKCZM2fqs88+00MPPaSnnnpKw4cPT/txduzYobvuust1oSkWi+n222/X4MGD1aNHD5WUlOi1115zuiwAQBJfcroAAIBztm7dqr/+9a/6j//4D1177bUZO86OHTu0aNEijRgxQieddFLGjpNus2fP1nPPPae5c+dq7NixWrZsmb7yla9o9erVOuuss5wuDwBwCIINAHjYrl27JEl9+vRxtpAOikajysnJUXZ2+i9A+OMf/6hnnnlGDzzwgG699VZJ0re+9S2NHz9et912m9588820HxMA0HFcigYAHjV79myde+65kqSZM2cqKytLU6ZMScz/+c9/1te//nUVFhYqNzdXp5xyin7zm9+0uI/PPvtMt956qyZMmKBevXopPz9fZWVl+tOf/pTYZ82aNTr11FMlSddcc42ysrKUlZWlZcuWSZJGjBih2bNnH1bflClTWtSzZs0aZWVl6ZlnntEdd9yhIUOGKC8vT42NjZKk9evXa/r06SooKFBeXp7OPfdc/e///u9h9/vnP/9ZkUjkiL+f5557Tt26ddP111+f2Jabm6s5c+aoqqpK27dvP+J9AAA6D2dsAMCjvv3tb2vIkCG699579d3vflennnqqBg4cKEl6//33deaZZ2rIkCH6/ve/r549e+rZZ5/VJZdcov/6r//SpZdeKkn6y1/+ohdeeEEzZ87UyJEjVVdXp5///Oc699xz9cEHH2jw4MEKBoO6++67tXDhQl1//fU6++yzJUlnnHFGh+r+4Q9/qJycHN16662KxWLKycnR66+/rrKyMk2ePFl33nmnsrOztXTpUp1//vn6/e9/r9NOOy3x/cFgUOeee67WrFnT7nHeeecdHXfcccrPz2+x/Yv72rhxo4YNG9ahnwEAkH4EGwDwqNLSUsViMd177706++yz9fWvfz0x973vfU+BQEBvvfWWfD6fJOk73/mOzjrrLN1+++2JYDNhwgR9+OGHLS4Fu/rqq3X88cfriSee0IIFCzRw4ECVlZVp4cKFKi0tVSgUOqa6o9Go3n77bfXo0UOSFI/HdcMNN+i8887Tyy+/rKysLEl2cDvhhBN0xx136Le//W3Kx6mtrdWgQYMO2/7Fth07dhzDTwEASDcuRQMAtPDZZ5/p9ddf1+WXX649e/bIsixZlqXdu3dr2rRp2rx5sz755BNJks/nS4SagwcPavfu3erVq5eKi4u1YcOGjNQ3a9asRKiR7DMnmzdv1je/+U3t3r07UW9TU5MuuOACvfHGG2pubk7sH4/Hj3i2RpI+//zzRKg7VG5ubmIeANB1cMYGANDCli1bFI/HtWDBAi1YsCDpPrt27dKQIUPU3Nysn/zkJ3rkkUe0bds2HTx4MLFPv379MlLfyJEjW3y9efNmSXbgaUtDQ4P69u2b0nF69OihWCx22PZoNJqYBwB0HQQbAEALX5zduPXWWzVt2rSk+4wZM0aSdO+992rBggX653/+Z/3whz9UYWGhsrOzNXfu3BZnSdrzxaVjrR08eFDdunU7bHvrQPHFcR544IE2l5Lu1avXUdVyqEGDBiXOTB2qtrZWkjR48OCU7xMAkDkEGwBAC6NGjZIkde/eXVOnTm133+eee07nnXeennjiiRbb6+vr5ff7E1+3FV4kqW/fvqqvrz9s+1//+tdELe0ZPXq0JCk/P/+I9abipJNO0urVq9XY2NhiAYH169cn5gEAXQfvsQEAtDBgwABNmTJFP//5zxNnJw716aefJv67W7duisfjLeZXrFhx2JmOnj17SlLSADN69GitW7dO+/fvT2x76aWXjno55cmTJ2v06NH613/9V+3du7fdeqWjX+7561//ug4ePKh///d/T2yLxWJaunSpSkpKWBENALoYztgAAA6zZMkSnXXWWZowYYKuu+46jRo1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ouJgsaL7oknnM/LzA+hUBBsAzquX1CypUlKw1dxKSQs6uyDAQPVq+3kWlqKhqCzLSm9j394xO/m5bVmWHWo68+cH0KkINqbr21e66ip7BLq6oKRJrbZxJRqQXsmeZ04c06nnthM/PzoHPY/nEWxMN3KkVFnpdBUAAACZRc/jeayKZrpoVNqyxR4BAABMRc/jeQQb033wgTR2rD0CAACYip7H8wg2AAAAAFyPYAMAAADA9VIONm+88YYuuugiDR48WFlZWXrhhRdazMfjcS1cuFCDBg1Sjx49NHXqVG3evDld9QIAAADAYVIONk1NTTrxxBO1ZMmSpPP333+/fvrTn+qxxx7T+vXr1bNnT02bNk1R3sgFAAAAIENSXu65rKxMZWVlSefi8bgefvhh3XHHHbr44oslSb/4xS80cOBAvfDCC/rGN75xbNUidZMmSfG401UAAABkFj2P56X1PTbbtm3Tzp07NXXq1MS2goIClZSUqKqqKp2HAgAAAICEtH5A586dOyVJAwcObLF94MCBibnWYrGYYrFY4uvGxsZ0loSaGmn2bGnZMqm42Olq4IBIJCLLsg7bHg479bHfAOANbf39lSS/369AIJDW7/M8eh7PS2uw6YjFixdr0aJFTpdhrqYmad06e4TnRCIRFQeLFd3He9wAoDMd6e9vbl6uasI1h4WUjn4fRM+D9F6KVlRUJEmqq6trsb2uri4x11pFRYUaGhoSt+3bt6ezJMDTLMuyXxwrJVW3uv3Q0dIAwGjt/v2tlKL7oknPynT0+wCk+YzNyJEjVVRUpFWrVumkk06SZF9atn79et14441Jv8fn88nn86WzDACtBSVNarWNK9EAIPOS/f3N5PcBHpZysNm7d6+2bNmS+Hrbtm3auHGjCgsLFQgENHfuXP3oRz/S2LFjNXLkSC1YsECDBw/WJZdcks66AQAAACAh5WDz9ttv67zzzkt8PX/+fEnSrFmztGzZMt12221qamrS9ddfr/r6ep111ll65ZVXlJubm76qcfRGjJCeesoeAQAATEXP43kpB5spU6Yo3s4a4VlZWbr77rt19913H1NhSJPCQikUcroKAACAzKLn8by0Lh6ALujTT6UlS+wRAADAVPQ8nkewMd327dJNN9kjAACAqeh5PI9gAwAAAMD1CDYAAAAAXI9gAwAAAMD1CDam691buvBCewQA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",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "  1  feature: 1\n",
      "\n",
      "       dtype: float64\n",
      "  nan values: 0.0%\n",
      "         max: 19.86661808715871\n",
      "           1: -8.727124941895372\n",
      "          25: -0.45908489661153007\n",
      "          50: 2.875134866985423\n",
      "          75: 6.288434737224429\n",
      "          99: 14.424046274543118\n",
      "         min: -10.963913297285615\n",
      " outlier min: -10.58036434736547\n",
      " outlier max: 16.409714187978366\n",
      "    outliers: 0.6%\n",
      "        mean: 2.9552584127690014\n",
      "         std: 4.99683092772426\n",
      " normal dist: True\n"
     ]
    },
    {
     "data": {
      "image/png": "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tF5++WUVFxcnl99xxx3aunWrtm/f3mz9e+65R2vWrElnCQAAAAD6kP3792vMmDHtrpP2IzZdtXLlSpWWliZ/b2xs1AcffKChQ4cqIyPDwcp6VkNDg8aOHav9+/crLy/P6XLQTTyOfQOPY9/A49h38Fj2DTyOfYPTj6Npmjpy5IhGjRrV4bppDzbBYFD9+vVTbW1ts+W1tbUqLCxstX4gEFAgEGi2bPDgwekuy7Xy8vJ4svcBPI59A49j38Dj2HfwWPYNPI59g5OPY35+fqfWS/vFA7KysjR79mxt3rw5uayxsVGbN29udmoaAAAAAKRLj5yKVlpaqmXLluljH/uYzj//fD300EM6duyYrrvuup7YHQAAAACf65Fg89nPflbvv/++7r77btXU1Oicc87R888/rxEjRvTE7jwpEAho9erVrU7Dg7fwOPYNPI59A49j38Fj2TfwOPYNXnoc035VNAAAAADobT3yBZ0AAAAA0JsINgAAAAA8j2ADAAAAwPMINgAAAAA8j2DTy7797W/rwgsvVE5OTptfRBqLxfSJT3xCOTk5Gj58uP7f//t/+uijj3q3UHTZ+PHjlZGR0ezn/vvvd7osdMK6des0fvx4ZWdna86cOfrzn//sdEnognvuuafVc2/KlClOl4UOvPTSS1qyZIlGjRqljIwMPfXUU83mTdPU3XffrZEjR2rAgAGaP3++du/e7UyxaFdHj+Xy5ctbPUcXLVrkTLFIqaysTOedd55yc3M1fPhwXXnllaqqqmq2TjweV0lJiYYOHapBgwZp6dKlqq2tdaji1Ag2vezEiRO6+uqrddNNN6WcP3XqlD7xiU/oxIkTevnll/XTn/5UGzZs0N13393LlaI71q5dq+rq6uTPihUrnC4JHfjVr36l0tJSrV69Wq+++qpmzpyphQsX6tChQ06Xhi6YNm1as+fen/70J6dLQgeOHTummTNnat26dSnnv/vd7+qHP/yhHn30UW3fvl0DBw7UwoULFY/He7lSdKSjx1KSFi1a1Ow5+otf/KIXK0RHtm7dqpKSEm3btk2///3vdfLkSS1YsEDHjh1LrnPrrbfqmWee0aZNm7R161YdPHhQV111lYNVp2DCEevXrzfz8/NbLX/uuefMzMxMs6amJrnskUceMfPy8sxEItGLFaKrxo0bZz744INOl4EuOv/8882SkpLk76dOnTJHjRpllpWVOVgVumL16tXmzJkznS4DNkgyn3zyyeTvjY2NZmFhofm9730vuayurs4MBALmL37xCwcqRGe1fCxN0zSXLVtmXnHFFY7Ug+45dOiQKcncunWraZrW869///7mpk2bkutEo1FTkllRUeFUma1wxMZlKioqNH369GZfZrpw4UI1NDRo165dDlaGzrj//vs1dOhQnXvuufre977HKYQud+LECVVWVmr+/PnJZZmZmZo/f74qKiocrAxdtXv3bo0aNUoTJ07UF7/4RcViMadLgg379u1TTU1Ns+dmfn6+5syZw3PTo7Zs2aLhw4erqKhIN910kw4fPux0SWhHfX29JKmgoECSVFlZqZMnTzZ7Tk6ZMkWhUMhVz8kznC4AzdXU1DQLNZKSv9fU1DhREjrp61//umbNmqWCggK9/PLLWrlypaqrq/XAAw84XRraYBiGTp06lfI599ZbbzlUFbpqzpw52rBhg4qKilRdXa01a9bo4osv1s6dO5Wbm+t0eeiG0+93qZ6bvBd6z6JFi3TVVVdpwoQJ2rt3r+68804tXrxYFRUV6tevn9PloYXGxkbdcsstuuiii3T22WdLsp6TWVlZrT4f7rbnJMEmDb75zW/qO9/5TrvrRKNRPszqQV15bEtLS5PLZsyYoaysLH3lK19RWVmZAoFAT5cK+NbixYuT/z1jxgzNmTNH48aN0+OPP67rr7/ewcoASNLnPve55H9Pnz5dM2bM0KRJk7RlyxZdfvnlDlaGVEpKSrRz505PflaRYJMGt912m5YvX97uOhMnTuzUtgoLC1tdken0FScKCwu7VR+6z85jO2fOHH300Ud69913VVRU1APVwa5gMKh+/fq1uqpLbW0tzzcPGzx4sM466yzt2bPH6VLQTaeff7W1tRo5cmRyeW1trc455xyHqkK6TJw4UcFgUHv27CHYuMzNN9+sZ599Vi+99JLGjBmTXF5YWKgTJ06orq6u2VEbt71fEmzSYNiwYRo2bFhatlVcXKxvf/vbOnTokIYPHy5J+v3vf6+8vDxNnTo1LftA59l5bHfs2KHMzMzk4wj3ycrK0uzZs7V582ZdeeWVkqxD8Js3b9bNN9/sbHHotqNHj2rv3r269tprnS4F3TRhwgQVFhZq8+bNySDT0NCg7du3t3lVUXjHgQMHdPjw4WahFc4yTVMrVqzQk08+qS1btmjChAnN5mfPnq3+/ftr8+bNWrp0qSSpqqpKsVhMxcXFTpScEsGml8ViMX3wwQeKxWI6deqUduzYIUmaPHmyBg0apAULFmjq1Km69tpr9d3vflc1NTW66667VFJSwulMLlZRUaHt27fr0ksvVW5urioqKnTrrbcqEoloyJAhTpeHdpSWlmrZsmX62Mc+pvPPP18PPfSQjh07puuuu87p0tBJt99+u5YsWaJx48bp4MGDWr16tfr166fPf/7zTpeGdhw9erTZUbV9+/Zpx44dKigoUCgU0i233KJvfetbOvPMMzVhwgStWrVKo0aNSv5PCLhHe49lQUGB1qxZo6VLl6qwsFB79+7VHXfcocmTJ2vhwoUOVo2mSkpKtHHjRj399NPKzc1Nfm4mPz9fAwYMUH5+vq6//nqVlpaqoKBAeXl5WrFihYqLi3XBBRc4XH0TTl+WzW+WLVtmSmr18+KLLybXeffdd83FixebAwYMMIPBoHnbbbeZJ0+edK5odKiystKcM2eOmZ+fb2ZnZ5vhcNi87777zHg87nRp6IR///d/N0OhkJmVlWWef/755rZt25wuCV3w2c9+1hw5cqSZlZVljh492vzsZz9r7tmzx+my0IEXX3wx5fvhsmXLTNO0Lvm8atUqc8SIEWYgEDAvv/xys6qqytmikVJ7j+Xx48fNBQsWmMOGDTP79+9vjhs3zrzxxhubfa0FnJfq8ZNkrl+/PrnOhx9+aH7ta18zhwwZYubk5Jif/vSnzerqaueKTiHDNE2zV5MUAAAAAKQZ32MDAAAAwPMINgAAAAA8j2ADAAAAwPMINgAAAAA8j2ADAAAAwPMINgAAAAA8j2ADAAAAwPMINgAAAAA8j2ADAAAAwPMINgAAAAA8j2ADAAAAwPMINgAAAAA87/8D2OfWIZgTFAsAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x1 = np.random.normal(size=(1000,2))\n",
    "x2 = np.random.normal(3, 5, size=(1000,2))\n",
    "x = x1 + x2\n",
    "analyze_array(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def get_relpath(path):\n",
    "    current_path = os.getcwd()\n",
    "    if is_listy(path):\n",
    "        relpaths = []\n",
    "        for p in path:\n",
    "            relpaths.append(os.path.relpath(p, current_path))\n",
    "        return relpaths\n",
    "    else:\n",
    "        return os.path.relpath(path, current_path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def get_root():\n",
    "    \"Returns the root directory of the git repository.\"\n",
    "    import subprocess\n",
    "    git_root = subprocess.check_output([\"git\", \"rev-parse\", \"--show-toplevel\"]).decode().strip()\n",
    "    return git_root\n",
    "\n",
    "\n",
    "def to_root_path(path):\n",
    "    \"Converts a path to an absolute path from the root directory of the repository.\"\n",
    "    if path is None:\n",
    "        return path\n",
    "    path = Path(path)\n",
    "    if path.is_absolute():\n",
    "        return path\n",
    "    else:\n",
    "        return Path(get_root()) / path"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def split_in_chunks(o, chunksize, start=0, shuffle=False, drop_last=False):\n",
    "    stop = ((len(o) - start)//chunksize*chunksize) if drop_last else None\n",
    "    chunk_list = []\n",
    "    for s in np.arange(len(o))[start:stop:chunksize]:\n",
    "        chunk_list.append(np.random.permutation(o[slice(s, s+chunksize)]) if shuffle else o[slice(s, s+chunksize)])\n",
    "    if shuffle: random.shuffle(chunk_list)\n",
    "    return chunk_list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = np.arange(5, 15)\n",
    "test_eq(split_in_chunks(a, 3, drop_last=False), [array([5, 6, 7]), array([ 8,  9, 10]), array([11, 12, 13]), array([14])])\n",
    "test_eq(split_in_chunks(a, 3, drop_last=True), [array([5, 6, 7]), array([ 8,  9, 10]), array([11, 12, 13])])\n",
    "test_eq(split_in_chunks(a, 3, start=2, drop_last=True), [array([7, 8, 9]), array([10, 11, 12])])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def save_object(o, file_path, verbose=True):\n",
    "    file_path = Path(file_path)\n",
    "    if not file_path.suffix == '.pkl':\n",
    "        file_path = file_path.parent / (file_path.name + '.pkl')\n",
    "    create_dir(file_path.parent, verbose)\n",
    "    joblib.dump(o, file_path, )\n",
    "    pv(f'{type(o).__name__} saved as {file_path}', verbose)\n",
    "\n",
    "def load_object(file_path):\n",
    "    file_path = Path(file_path)\n",
    "    if not file_path.suffix == '.pkl':\n",
    "        file_path = file_path.parent / (file_path.name + '.pkl')\n",
    "    return joblib.load(file_path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data directory already exists.\n",
      "ndarray saved as data/test.pkl\n"
     ]
    }
   ],
   "source": [
    "split = np.arange(100)\n",
    "save_object(split, file_path='data/test')\n",
    "split2 = load_object('data/test.pkl')\n",
    "test_eq(split, split2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data directory already exists.\n",
      "L saved as data/test.pkl\n"
     ]
    }
   ],
   "source": [
    "splits = L([[[0,1,2,3,4], [5,6,7,8,9]],[[10,11,12,13,14], [15,16,17,18,19]]])\n",
    "save_object(splits, file_path=Path('data/test'))\n",
    "splits2 = load_object('data/test')\n",
    "test_eq(splits, splits2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def get_idxs_to_keep(o, cond, crit='all', invert=False, axis=(1,2), keepdims=False):\n",
    "    idxs_to_keep = cond(o)\n",
    "    if isinstance(o, torch.Tensor):\n",
    "        axis = tuplify(axis)\n",
    "        for ax in axis[::-1]:\n",
    "            if crit == 'all':\n",
    "                idxs_to_keep = torch.all(idxs_to_keep, axis=ax, keepdim=keepdims)\n",
    "            elif crit == 'any':\n",
    "                idxs_to_keep = torch.any(idxs_to_keep, axis=ax, keepdim=keepdims)\n",
    "        if invert: idxs_to_keep =  ~idxs_to_keep\n",
    "        return idxs_to_keep\n",
    "    else:\n",
    "        if crit == 'all':\n",
    "            idxs_to_keep = np.all(idxs_to_keep, axis=axis, keepdims=keepdims)\n",
    "        elif crit == 'any':\n",
    "            idxs_to_keep = np.any(idxs_to_keep, axis=axis, keepdims=keepdims)\n",
    "        if invert: idxs_to_keep = ~idxs_to_keep\n",
    "        return idxs_to_keep"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = np.random.rand(100, 2, 10)\n",
    "a[a > .95] = np.nan\n",
    "idxs_to_keep = get_idxs_to_keep(a, np.isfinite)\n",
    "if idxs_to_keep.size>0:\n",
    "    test_eq(np.isnan(a[idxs_to_keep]).sum(), 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def zerofy(a, stride, keep=False):\n",
    "    \"Create copies of an array setting individual/ group values to zero \"\n",
    "    if keep:\n",
    "        a_copy = a.copy()[None]\n",
    "    a = a[None]\n",
    "    add_steps = np.int32(np.ceil(a.shape[2] / stride) * stride - a.shape[2])\n",
    "    if add_steps > 0:\n",
    "        a = np.concatenate([np.zeros((a.shape[0], a.shape[1], add_steps)), a], -1)\n",
    "    a = a.repeat(a.shape[1] * a.shape[2] / stride, 0)\n",
    "    a0 = np.arange(a.shape[0])[:, None]\n",
    "    a1 = np.repeat(np.arange(a.shape[1]), a.shape[0] // a.shape[1])[:, None]\n",
    "    a2 = np.lib.stride_tricks.sliding_window_view(np.arange(a.shape[-1]), stride, 0)[::stride]\n",
    "    a2 = np.repeat(a2[None], stride * a.shape[0] / a.shape[2], axis=0).reshape(-1, stride)\n",
    "    a[a0, a1, a2] = 0\n",
    "    if add_steps > 0:\n",
    "        a = a[..., add_steps:]\n",
    "    if keep:\n",
    "        return np.concatenate([a_copy, a])\n",
    "    else:\n",
    "        return a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[ 0.,  0.,  3.,  4.,  5.],\n",
       "        [ 6.,  7.,  8.,  9., 10.]],\n",
       "\n",
       "       [[ 1.,  2.,  0.,  0.,  0.],\n",
       "        [ 6.,  7.,  8.,  9., 10.]],\n",
       "\n",
       "       [[ 1.,  2.,  3.,  4.,  5.],\n",
       "        [ 0.,  0.,  8.,  9., 10.]],\n",
       "\n",
       "       [[ 1.,  2.,  3.,  4.,  5.],\n",
       "        [ 6.,  7.,  0.,  0.,  0.]]])"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stride = 3\n",
    "a = np.arange(2*5).reshape(2,5) + 1\n",
    "\n",
    "zerofy(a, stride, keep=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def feat2list(o):\n",
    "    if o is None: return []\n",
    "    elif isinstance(o, str): return [o]\n",
    "    return list(o)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = 'a'\n",
    "test_eq(feat2list(a), ['a'])\n",
    "a = ['a', 'b']\n",
    "test_eq(feat2list(a), ['a', 'b'])\n",
    "a = None\n",
    "test_eq(feat2list(a), [])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def smallest_dtype(num, use_unsigned=False):\n",
    "    \"Find the smallest dtype that can safely hold `num`\"\n",
    "    if use_unsigned:\n",
    "        int_dtypes = ['uint8', 'uint16', 'uint32', 'uint64']\n",
    "        float_dtypes = ['float16', 'float32']\n",
    "        float_bounds = [2**11, 2**24] # 2048, 16777216\n",
    "    else:\n",
    "        int_dtypes = ['int8', 'int16', 'int32', 'int64']\n",
    "        float_dtypes = ['float16', 'float32', 'float64']\n",
    "        float_bounds = [2**11, 2**24, 2**53] # 2048, 16777216, 9007199254740992\n",
    "    if isinstance(num, Integral):\n",
    "        for dtype in int_dtypes:\n",
    "            if np.iinfo(dtype).min <= num <= np.iinfo(dtype).max:\n",
    "                return np.dtype(dtype)\n",
    "        raise ValueError(\"No dtype found\")\n",
    "    elif isinstance(num, float):\n",
    "        for dtype, bound in zip(float_dtypes, float_bounds):\n",
    "            num = round(num)\n",
    "            if -bound <= num <= bound:\n",
    "                return np.dtype(dtype)\n",
    "        raise ValueError(\"No dtype found\")\n",
    "    else:\n",
    "        raise ValueError(\"Input is not a number\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_eq(smallest_dtype(3654), 'int16')\n",
    "test_eq(smallest_dtype(2048.), 'float16')\n",
    "test_eq(smallest_dtype(365454), 'int32')\n",
    "test_eq(smallest_dtype(365454.), 'float32')\n",
    "test_eq(smallest_dtype(3654545134897), 'int64')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "def plot_forecast(X_true, y_true, y_pred, sel_vars=None, idx=None, figsize=(8, 4), n_samples=1):\n",
    "\n",
    "    import matplotlib.pyplot as plt\n",
    "    import matplotlib.patches as mpatches\n",
    "\n",
    "    def _plot_forecast(X_true, y_true, y_pred, sel_var=None, idx=None, figsize=(8, 4)):\n",
    "        if idx is None:\n",
    "            idx = np.random.randint(0, len(X_true))\n",
    "        if sel_var is None:\n",
    "            title = f'sample: {idx}'\n",
    "        else:\n",
    "            title = f'sample: {idx} sel_var: {sel_var}'\n",
    "        if sel_var is None: sel_var = slice(None)\n",
    "        pred = np.concatenate([X_true[idx, sel_var], y_pred[idx, sel_var]], -1)\n",
    "        pred[..., :X_true.shape[-1]] = np.nan\n",
    "\n",
    "        true = np.concatenate([X_true[idx, sel_var], y_true[idx, sel_var]], -1)\n",
    "        true_hist = true.copy()\n",
    "        true_fut = true.copy()\n",
    "        true_hist[..., X_true.shape[-1]:] = np.nan\n",
    "        true_fut[..., :X_true.shape[-1]] = np.nan\n",
    "\n",
    "        plt.figure(figsize=figsize)\n",
    "        plt.plot(pred.T, color='orange', lw=1, linestyle='--')\n",
    "        plt.plot(true_hist.T, color='purple', lw=1)\n",
    "        plt.plot(true_fut.T, color='purple', lw=1, linestyle='--')\n",
    "        plt.axvline(X_true.shape[-1] - 1, color='gray', lw=.5, linestyle='--')\n",
    "\n",
    "        plt.title(title)\n",
    "        plt.xlim(0, X_true.shape[-1] + y_true.shape[-1])\n",
    "        pred_patch = mpatches.Patch(color='orange', label='pred')\n",
    "        true_patch = mpatches.Patch(color='purple', label='true')\n",
    "        plt.legend(handles=[true_patch, pred_patch], loc='best')\n",
    "        plt.show()\n",
    "\n",
    "    assert X_true.shape[:-1] == y_true.shape[:-1] == y_pred.shape[:-1]\n",
    "    assert y_true.shape[-1] == y_pred.shape[-1]\n",
    "\n",
    "    if idx is not None:\n",
    "        idx = listify(idx)\n",
    "        n_samples = len(idx)\n",
    "        iterator = idx\n",
    "    else:\n",
    "        iterator = random_randint(len(X_true), size=n_samples)\n",
    "\n",
    "    if sel_vars is None:\n",
    "        for idx in iterator:\n",
    "            _plot_forecast(X_true, y_true, y_pred, sel_var=None, idx=idx, figsize=figsize)\n",
    "    else:\n",
    "        for idx in iterator:\n",
    "            if sel_vars is True:\n",
    "                sel_vars = np.arange(y_true.shape[1])\n",
    "            else:\n",
    "                sel_vars = listify(sel_vars)\n",
    "            for sel_var in sel_vars:\n",
    "                _plot_forecast(X_true, y_true, y_pred, sel_var=sel_var, idx=idx, figsize=figsize)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#| export\n",
    "def str2callable(\n",
    "    object_path: str = None # The string representing the object path.\n",
    "):\n",
    "    \"Transform a string into a callable object without importing it in the script.\"\n",
    "\n",
    "\n",
    "    if object_path in [None, \"null\", \"None\", \"none\"]:\n",
    "        return None\n",
    "\n",
    "\n",
    "    pattern = r'([\\w\\.]+)\\((.*)\\)'\n",
    "    match = re.match(pattern, object_path)\n",
    "\n",
    "\n",
    "    if match:\n",
    "        path, args_str = match.groups()\n",
    "\n",
    "\n",
    "        # Parse the arguments string into a dictionary\n",
    "        kwargs = {}\n",
    "        if args_str:\n",
    "            for arg_str in args_str.split(','):\n",
    "                key, value = arg_str.split('=')\n",
    "                kwargs[key.strip()] = eval(value.strip())\n",
    "\n",
    "\n",
    "        mod_name, object_name = path.rsplit(\".\", 1)\n",
    "    else:\n",
    "        mod_name, object_name = object_path.rsplit(\".\", 1)\n",
    "        kwargs = {}\n",
    "\n",
    "\n",
    "    try:\n",
    "        mod = importlib.import_module(mod_name)\n",
    "        obj = getattr(mod, object_name)\n",
    "\n",
    "\n",
    "        if inspect.isclass(obj):\n",
    "            return obj(**kwargs)\n",
    "        elif inspect.isfunction(obj):\n",
    "            return functools.partial(obj, **kwargs)\n",
    "        else:\n",
    "            raise TypeError(f\"{object_path} is not a class or a function\")\n",
    "    except (ImportError, AttributeError) as e:\n",
    "        raise ImportError(f\"Failed to import {object_path}: {e}\")\n",
    "    except Exception as e:\n",
    "        raise TypeError(f\"{object_path} is not a class or a function: {e}\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 name 'pyts' is not defined\n",
      "1 name 'pyts' is not defined\n",
      "2 name 'pyts' is not defined\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3 success: GramianAngularField()\n"
     ]
    }
   ],
   "source": [
    "# test showing you don't need to import the object in the script. The library needs to be installed though.\n",
    "try:\n",
    "    pyts\n",
    "except Exception as e:\n",
    "    print(0, e)\n",
    "try:\n",
    "    pyts.image\n",
    "except Exception as e:\n",
    "    print(1, e)\n",
    "try:\n",
    "    gasf = eval(\"pyts.image.GramianAngularField(method='summation')\")\n",
    "    print(f\"2 success: {gasf}\")\n",
    "except Exception as e:\n",
    "    print(2, e)\n",
    "try:\n",
    "    gasf = str2callable(\"pyts.image.GramianAngularField(method='summation')\")\n",
    "    print(f\"3 success: {gasf}\")\n",
    "except Exception as e:\n",
    "    print(3, e)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": "IPython.notebook.save_checkpoint();",
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "/Users/nacho/notebooks/tsai/nbs/002_utils.ipynb saved at 2024-01-31 17:24:03\n",
      "Correct notebook to script conversion! 😃\n",
      "Wednesday 31/01/24 17:24:06 CET\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "\n",
       "                <audio  controls=\"controls\" autoplay=\"autoplay\">\n",
       "                    <source src=\"data:audio/wav;base64,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\" type=\"audio/wav\" />\n",
       "                    Your browser does not support the audio element.\n",
       "                </audio>\n",
       "              "
      ],
      "text/plain": [
       "<IPython.lib.display.Audio object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#|eval: false\n",
    "#|hide\n",
    "from tsai.export import get_nb_name; nb_name = get_nb_name(locals())\n",
    "from tsai.imports import create_scripts; create_scripts(nb_name)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "python3",
   "language": "python",
   "name": "python3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
